代码之家  ›  专栏  ›  技术社区  ›  Liveth

GDB核心回溯Bogus地址

  •  1
  • Liveth  · 技术社区  · 10 年前

    当我用带有-o2标志的g++编译相同的代码时,我可以在没有任何Bogus地址的情况下成功地进行回溯。喜欢

    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省略帧指针)我应该使用哪些标志进行调试?原因。。。我不是SO专家。

    1 回复  |  直到 6 年前
        1
  •  0
  •   dbrank0    10 年前

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

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