GDB核心回溯虚假地址

时间:2015-02-24 23:20:09

标签: c++ gdb g++ core backtrace

当我使用带有-o2标志的g ++编译相同的代码时,我可以在没有任何虚假地址的情况下成功回溯。等;

0x08156079 in CItem::GetValue (this=0x3adb0f00, idx=0) at item.cpp:957
0x081b123c in quest::item_has_flag (L=0x3af9bdc0) at questlua_item.cpp:155
0x08363cba in luaD_precall (L=0x3af9bdc0, func=0x3b1cedd8) at ldo.c:249
0x0836ba86 in luaV_execute (L=0x3af9bdc0) at lvm.c:637
0x08363fad in resume (L=0x3af9bdc0, ud=0xffffa164) at ldo.c:337
0x0836393b in luaD_protectedparser (L=0x3af9bdc0, z=0x8363f80, bin=-24220)
....

但我需要使用g ++ 48(使用c ++ 11)以获得更好的性能和其他原因...所以,当我用-o3优化标志和g ++ 48做同样的事情时,我无法得到任何文件名等。喜欢;

#0  0x28a56f3c in ?? ()
No symbol table info available.
#1  0x00000032 in ?? ()
No symbol table info available.
#2  0xbfbf9838 in ?? ()
No symbol table info available.
#3  0x28a4ea3a in ?? ()
No symbol table info available.
#4  0x00000032 in ?? ()
No symbol table info available.
#5  0x00000004 in ?? ()
No symbol table info available.
#6  0x00000001 in ?? ()
No symbol table info available.
#7  0x28a70694 in ?? ()
No symbol table info available.
#8  0xbfbf969c in ?? ()
No symbol table info available.
#9  0x28a6b06c in ?? ()
No symbol table info available.

哪些标志我不能用于调试? (-fno-omit-frame-pointer)我应该使用哪些标志进行调试?原因......我不是SO专家。

1 个答案:

答案 0 :(得分:0)

使用gcc 4.8,您可以使用-Og开关来启用所有不会干扰调试的优化。

还要确保启用了调试信息(-g开关)。如果您将编译器更新到更新版本,则还应更新调试器。您可以尝试的另一件事是确保gcc以兼容格式生成调试信息(尝试-gdwarf-2或类似)。