在c++中使用backtrace()函数时出错
Error while using backtrace() function in c++?
我必须在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
。
相关文章:
- 类中私有结构的构造函数出错
- 字符串验证函数出错
- 我的类默认构造函数出错
- Dev-C++和Code::Blocks中的析构函数出错
- int对的哈希函数出错
- MSVC 编译器错误导致迭代器和友元函数出错
- 复制构造函数出错
- 使用 WinSock2 开发,使用 CreateThread() 函数出错
- 链接列表的Push_back函数出错
- 结构初始化中的隐式复制构造函数出错
- 异步函数出错
- 编译器错误消息错误:令牌之前的预期')' '*'。我的构造函数出错
- c++中使用std::bind和std::函数出错
- 在vector排序中使用c++模板函数出错
- 使用std::for_each lambda函数出错
- 二叉搜索树插入函数出错
- 调用类的函数出错
- c++使用删除函数出错
- 使用已删除的函数出错
- 调用构造函数出错