在c++中使用backtrace()函数时出错

Error while using backtrace() function in c++?

本文关键字:函数 出错 backtrace c++      更新时间:2023-10-16

我必须在c++函数中获得回溯并将其存储为字符串,如下所示:

string myFunction()
{
     void *array[5002];
    // get void*'s for all entries on the stack
    size_t size = backtrace(array, 5000);
    char** trace = backtrace_symbols(array, size);
    string stackTrace;
    for(size_t index=0; index<size; ++index)
    {
         stackTrace += trace[index];
    }
 return stackTrace;
}

使用上面的代码,我得到内存故障。

?? () from /lib64/libgcc_s.so.1
0x000000359be08934 in _Unwind_Backtrace () from /lib64/libgcc_s.so.1
0x00000035976e6358 in backtrace () from /lib64/libc.so.6
0x00002aaaab7afaec in (anonymous namespace)::myFunction() at fileName.cpp

有解决这个问题的建议吗?

您需要在gcc/g++中添加-rdynamic编译器标志:

g++ -rdynamic -Wall -o file.bin file.cpp

在调用backtrace之前,我会用memset(array, 0, sizeof (array))清除array。我想让它小一点:5000帧真的很深。

backtrace可能不工作(至少在32位系统上)的代码编译-fomit-frame-pointer优化标志为gcc