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

时间:2011-11-04 12:22:01

标签: c++ linux

我必须在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;
}

以上使用代码我得到内存故障。 以上错误的gdb的跟踪跟踪

?? () 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

任何消化都可以解决这个问题? 感谢Advace。

2 个答案:

答案 0 :(得分:0)

在调用memset(array, 0, sizeof (array))之前,我会array backtrace清除backtrace。我会让它变得更小:5000帧非常深。

对于使用-fomit-frame-pointer优化标记编译到gcc的代码,{{1}}可能不起作用(至少在32位系统上)。

答案 1 :(得分:0)

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

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