如何在未在gdb中加载的共享库中设置函数断点

pie*_*fou 14 debugging gdb breakpoints shared-libraries

我有一个共享库libtest.so,将使用它加载到主程序中dlopen.函数test()驻留在libtest.so主程序中并将在其中调用dlsym.有什么方法可以设置一个断点test吗?

请注意,libtest.so在链接时间内主程序尚未链接.否则,我应该能够设置断点,尽管它是一个待处理的动作.就我而言,当我这样做时b test,gdb会告诉我Function "test" not defined.

dic*_*ciu 14

实际上gdb应该告诉你,当加载新的库时,它能够在将来解析符号:

(gdb) b test
Function "test" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (test) pending.
(gdb) r
Run Code Online (Sandbox Code Playgroud)

稍后在加载.so对象后,它将解析断点,例如:

Reading symbols for shared libraries . done
Breakpoint 1 at 0xcafebebe
Pending breakpoint 1 - "test" resolved
Run Code Online (Sandbox Code Playgroud)


Mic*_*ael 8

实际上,这种方法并不总是有效.

假设我有几个共享库,每个库都有一个名为"Init"的函数.如果我加载了不同的库,那么"b Init"将断点设置为函数"Init"的错误实例.所以我必须像这样指定断点:

(gdb)b object5.c:66

没有名为object5.c的源文件.