在共享对象文件中设置gdb断点

时间:2012-08-14 00:13:16

标签: c++ gdb breakpoints shared-libraries

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

gdb funcname 

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

1 个答案:

答案 0 :(得分:3)

  

他们在gdb中是这样做的吗?

  

我试过了gdb funcname

那不行。您需要在gdb exename提示符下运行break funcname,然后(gdb)

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