2012-08-14 65 views
2

我有一个动态加载共享对象库的可执行文件,比如说foo.so.我不会构建foo.so,并将它作为库用于我的代码中。 foo.cpp编译为foo.so.我没有访问foo.cpp但有foo.so.我想在我的可执行文件调用这个共享库foo.so中的一个函数时(即调用foo.cpp中的函数时)设置一个断点。他们在gdb中是如何做到这一点的? 我试过在共享对象文件中设置gdb断点

gdb funcname 

但它似乎没有工作。任何指针如何在这一点上打破gdb?

+0

您可以更具体地介绍您正在使用的操作系统和gdb版本吗? – razeh 2012-08-14 02:00:13

+0

我正在使用CentOS 5.5和gdb 7.2。 – 2012-08-14 02:08:06

+0

@DeeptiJain共享对象库是否使用适当的调试标志进行编译? – 2012-08-14 04:32:59

回答

3

是他们在gdb中的一种方式吗?

是的。

我已经试过gdb funcname

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

在这一点上,GDB可能会告诉你,funcname尚不存在(因为你还没有动态加载foo.so),并会询问您是否要创建一个推迟断点。您应该回答yes,每次加载新的共享库时,GDB都会重试设置此断点。最终这将成功,并且您应该获得设置的断点(自动和无提示),并且稍后调用funcname时,该断点将触发并且GDB将停止(这正是您想要的)。