【发布时间】:2016-09-06 19:58:05
【问题描述】:
我最近在初始地址处设置了一个断点:
(gdb) b viewscreen_movieplayerst::create(char, viewscreenst*)
Breakpoint 1 at 0x804beec
第二个(通常的地址)是:
(gdb) run
Breakpoint 1, 0xf7b46630
in viewscreen_movieplayerst::create(char,viewscreenst*)()
from/path/libs/libgraphics.so
这是因为可执行文件被剥离了吗?还是可执行文件执行完毕,执行后地址发生变化?
另外,主要是:
(gdb) b main
Breakpoint 1 at 0x804bdec
地址好像很接近所以我把它包括在内。
编辑:
【问题讨论】:
-
你的问题对我来说并不完全清楚。如果你
run时地址不同(你可以检查info break),那么是的,它可能是运行时重定位。如果它实际上有两个地址,那么这可能是由于各种编译器优化而发生的。 -
@Tom Tromey 在什么情况下它会有 2 个地址?如果没有,你给了我我一直在寻找的“运行时重定位”标语
-
由于内联和重载解析,一个函数可能有多个地址。
-
是的,内联。也有相关的优化,但它们很少见。此外,如果您设置了一个
file:line断点,由于模板实例化,您可以看到多个地址——通常每次实例化都会命中一次。
标签: debugging assembly gdb breakpoints