4

我正在尝试调试动态共享库 libexecHook.so 中的一些函数。这个库是预加载设置 LD_PRELOAD 为了拦截和重写一些对 execve() 和朋友的调用。出于调试目的,我用符号构建了 gmake。根据我在其他问题中读到的内容,这应该有效:

gdb ~/tmp/make-dfsg-3.81/make
set exec-wrapper env LD_PRELOAD=/home/marko/execHook.C027/lib/libexecHook.so.0.0.0
start
break execve
break execvp
cont

我确实看到断点设置正确,例如

4       breakpoint     keep y   0x00007ffff7bd92e0 in execvp at execHook.c:128

但是 gdb 永远不会在我预加载的 exec..() 函数中中断。在执行期间观察调试输出,我看到我的库函数正在被调用。

4

2 回答 2

2

gdb 没有在我预加载的包装函数中中断的原因是这些函数是从未附加 gdb 的子进程执行的。在 Linux 上我可以

set follow-fork-mode child

使 gdb 附加到在vfork().

于 2012-02-11T16:39:56.647 回答
1

start在设置断点之前尝试说。这将开始运行程序,这将满足库依赖项,希望使用您的 LD_PRELOAD 路径。然后在启动后设置断点,然后继续。

于 2012-02-09T22:14:57.737 回答