GDB 核心回溯 虚假地址
GDB core backtrace Bogus addresses
当我使用带有 -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 专家。
对于 gcc 4.8,您可以使用 -Og 开关,以启用所有不干扰调试的优化。
还要确保您启用了调试信息(-g 开关)。如果您将编译器更新到较新的版本,则还应该更新调试器。您可以尝试的另一件事是确保 gcc 以兼容格式生成调试信息(尝试 -gdwarf-2 或类似格式)。
当我使用带有 -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 专家。
对于 gcc 4.8,您可以使用 -Og 开关,以启用所有不干扰调试的优化。
还要确保您启用了调试信息(-g 开关)。如果您将编译器更新到较新的版本,则还应该更新调试器。您可以尝试的另一件事是确保 gcc 以兼容格式生成调试信息(尝试 -gdwarf-2 或类似格式)。