2

我有一个动态加载共享对象库的可执行文件,比如说 foo.so。我不构建 foo.so,它是作为库提供给我的,可以在我的代码中使用。foo.cpp 编译为 foo.so。我无权访问 foo.cpp,但有 foo.so。当我的可执行文件调用此共享库 foo.so 中的函数时(即调用 foo.cpp 中的函数时),我想设置一个断点。他们在 gdb 中有这样做的方法吗?我努力了

gdb funcname 

但它似乎不起作用。任何指针如何在这一点上打破 gdb?

4

1 回答 1

3

他们在 gdb 中有这样做的方法吗?

是的。

我努力了gdb funcname

那是行不通的。您需要运行gdb exename,然后break funcname(gdb)提示符处运行。

那时,GDB 可能会通知您funcname尚不存在(因为您还没有动态加载foo.so),并会询问您是否要创建延迟断点。您应该回答yes,每次加载新的共享库时,GDB 都会重试设置此断点。最终这将成功,并且您应该设置断点(自动和静默),当您调用funcname后者时,该断点将触发并且 GDB 将停止(这正是您想要的)。

于 2012-08-14T05:51:23.403 回答