【代码片段】Linux C++打印当前函数调用堆栈

发布时间:2024年01月07日

在开发大型项目时,尤其是多线程情况下,一般无法使用断点调试,这时候将当前函数的调用堆栈打印出来是非常有必要和有效的问题排查手段。
这里记录一段Linux环境下,打印函数堆栈的代码。

void get_native_callstack(std::string &callstack, int level)
{
    void* buf[128];
    int size = backtrace(buf, sizeof(buf));
    char** strings = backtrace_symbols(buf, size);
    if (strings != NULL) {
        for (int i = 0; i < size; i++) {
            callstack.append(strings[i]);
            callstack.append("\n");
        }
        free(strings);
    } else {
        callstack = "";
    }
}

void get_full_callstack(std::string &callstack, int level)
{
    return get_native_callstack(callstack, level);
}

使用:

std::string callstack;
get_full_callstack(callstack, 10); //打印10层堆栈
文章来源:https://blog.csdn.net/Attitude93/article/details/135395984
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。