我有一个动态加载共享对象库的可执行文件,比如说foo.so.我没有构建foo.so,它作为一个库提供给我在我的代码中使用。 foo.cpp编译给foo.so.我没有访问foo.cpp但有foo.so.我想在我的可执行文件调用此共享库foo.so中的函数时设置断点(即调用foo.cpp中的函数时)。他们在gdb中是这样做的吗? 我试过了
gdb funcname
但它似乎不起作用。任何指针如何在那一点打破gdb?
答案 0 :(得分:3)
他们在gdb中是这样做的吗?
是
我试过了
gdb funcname
那不行。您需要在gdb exename
提示符下运行break funcname
,然后(gdb)
。
此时,GDB可能会通知您funcname
尚不存在(因为您尚未动态加载foo.so
),并会询问您是否要创建延迟断点。您应该回答yes
,每次加载新的共享库时,GDB都会重试设置此断点。最终这将成功,你应该设置断点(自动和静默),当你稍后调用funcname
时,该断点将触发,GDB将停止(这正是你想要的)。