我必须在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。
答案 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