我有一个动态加载共享对象库的可执行文件,比如 foo.so。我不构建 foo.so,它是作为一个库提供给我在我的代码中使用的。 foo.cpp 编译后得到 foo.so。我无权访问 foo.cpp,但可以访问 foo.so。我想在我的可执行文件调用此共享库 foo.so 中的函数时(即调用 foo.cpp 中的函数时)设置一个断点。 gdb 中有这样做的方法吗? 我已经尝试过
gdb funcname
但似乎不起作用。有任何指示如何在此时中断 gdb 吗?
最佳答案
Is their a way in gdb to do so?
是的。
I have tried
gdb funcname
那是行不通的。您需要运行 gdb exename
,然后在 (gdb)
提示符处运行 break funcname
。
此时,GDB 可能会通知您 funcname
尚不存在(因为您尚未动态加载 foo.so
),并会询问您是否要创建延迟断点。您应该回答yes
,每次加载新的共享库时,GDB 都会重试设置此断点。最终这会成功,并且您应该设置断点(自动且静默),并且当您稍后调用 funcname 时,该断点将触发并且 GDB 将停止(这正是您想要的)。
关于c++ - 在共享对象文件中设置 gdb 断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11944038/