Debugging 包含类似地址但不同源行的GDB回溯

Debugging 包含类似地址但不同源行的GDB回溯,debugging,gdb,backtrace,virtual-address-space,debug-information,Debugging,Gdb,Backtrace,Virtual Address Space,Debug Information,我试图调试inkscape,并在其主共享库(即/usr/lib/inkscape/libinkscape_base.so)中的某个地址放置断点。当执行到达该断点时,回溯如下: #0 0x00007ffff6ecb220 in __static_initialization_and_destruction_0 (__priority=65535, __initialize_p=1) at /usr/include/c++/7/iostream:74 #1 0x00007ffff6ecb220

我试图调试
inkscape
,并在其主共享库(即
/usr/lib/inkscape/libinkscape_base.so
)中的某个地址放置断点。当执行到达该断点时,回溯如下:

#0  0x00007ffff6ecb220 in __static_initialization_and_destruction_0 (__priority=65535, __initialize_p=1) at /usr/include/c++/7/iostream:74
#1  0x00007ffff6ecb220 in _GLOBAL__sub_I_log_display_config.cpp(void) () at ./src/debug/log-display-config.cpp:83
#2  0x00007ffff7de5733 in call_init (env=0x7fffffffddd8, argv=0x7fffffffddc8, argc=1, l=<optimized out>) at dl-init.c:72
#3  0x00007ffff7de5733 in _dl_init (main_map=0x7ffff7ffe170, argc=1, argv=0x7fffffffddc8, env=0x7fffffffddd8) at dl-init.c:119
#4  0x00007ffff7dd60ca in _dl_start_user () at /lib64/ld-linux-x86-64.so.2
#5  0x0000000000000001 in  ()
#6  0x00007fffffffe176 in  ()
#7  0x0000000000000000 in  ()
#0 0x00007ffff6ecb220在/usr/include/c++/7/iostream:74处的静态初始化和销毁(优先级=65535,初始化p=1)
#1 0x00007ffff6ecb220位于./src/debug/log display config.cpp:83处的_GLOBAL\u sub\u I\u log\u display\u config.cpp(void))中
#2 0x00007ffff7de5733在dl init.c:72处的调用_init(env=0x7fffffffddd8,argv=0x7FFFFFDDC8,argc=1,l=)中
#3 0x00007ffff7de5733位于dl init.c处的初始位置(主映射=0x7FFFF7FF170,argc=1,argv=0x7FFFFFDDC8,env=0x7fffffffddd8)
#4 0x00007ffff7dd60ca位于/lib64/ld-linux-x86-64.so.2的_dl_start_user()中
#5 0x0000000000000001英寸()
#6 0x00007FFFFFE176英寸()
#7 0x0000000000000000英寸()
可以看出,
#0
#1
指向相同的地址但不同的源位置。这同样适用于
#2
#3
。怎么可能呢

怎么可能呢

内联是可能的

GCC发出足够的调试信息,让GDB知道一个特定的地址,即使它物理上位于
,实际上属于内联
foo

由于
foo
是“不存在的”,但对它的调用是由GDB在
backtrace
输出中合成的,因此GDB为它打印的地址有些不相关


GDB过去根本不打印地址(我的版本
8.3.50.20190824-24.fc31
),但我想这不可靠,有时GDB可能只是重复以前的回信地址。

谢谢。需要注意的一点是,代码中有许多手动堆栈指针修改,包括在该断点周围的修改,例如,
添加$0x8,%rsp
以及之后的几行,我们有
子$0x8,%rsp
。这些行是否会使回溯输出不可靠?