Avi*_*vio 10 c c++ symbols backtrace static-linking
看看这个问题和这个问题,我可以看到,为了backtrace_symbols()工作,必须用-rdynamic旗子编译.
我试过它变成一个测试程序和它的作品,但我正在写也与编译的程序-static和这个页面说,backtrace_symbols()当不工作-static被传递到编译器/连接.
有没有快速的解决方法,或者我的静态链接程序中永远不会有人类可读的回溯功能?
答案就在眼前:它出现在我在问题中链接的同一页面中.最后,我成功使用了libunwind.
#include <libunwind.h>
#include <stdio.h>
void do_backtrace()
{
unw_cursor_t cursor;
unw_context_t context;
unw_getcontext(&context);
unw_init_local(&cursor, &context);
while (unw_step(&cursor) > 0)
{
unw_word_t offset, pc;
char fname[64];
unw_get_reg(&cursor, UNW_REG_IP, &pc);
fname[0] = '\0';
(void) unw_get_proc_name(&cursor, fname, sizeof(fname), &offset);
printf ("%p : (%s+0x%x) [%p]\n", pc, fname, offset, pc);
}
}
int main()
{
do_backtrace();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到链接错误,因为我(再次)忘记在命令行的末尾放置链接器选项.我真的不明白为什么g++/ gcc忽略命令行选项时至少发出警告.要编译的正确命令行是(-g不需要):
g++ -static unwind.cpp -o unwind -lunwind -lunwind-x86
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4792 次 |
| 最近记录: |