在遇到GDB断点时自动调用应用程序代码中的函数

时间:2017-02-24 18:01:20

标签: c++ debugging gdb

我有多个不同的进程通过IPC进行通信,当使用gdb调试单个进程时,每当遇到断点时,我都会尝试向其他进程发送消息。有没有办法自动调用一个函数/一段代码(NotifyAll())每当一个断点被点击没有手动运行commands并调用该函数gdb控制台。

基本上,每当gdb调试器附加到其中一个进程时,我希望gdb知道每当遇到断点(应用程序范围)时它应该调用NotifyAll()

1 个答案:

答案 0 :(得分:0)

是的,这可以使用gdb中的Python脚本功能来完成。

特别要添加一个监听器来gdb.events.stop检查断点停止事件,然后调用你的函数。可能(我不知道),您必须通过向gdb事件循环发布事件来推迟调用函数。

要使用最少的手动干预来完成此工作,请使用gdb脚本自动加载功能将此Python脚本与您的应用程序相关联。这将要求用户信任该脚本(阅读add-auto-load-safe-path),但这都是。

请注意,执行此类操作可能会让尝试调试应用程序的人感到困惑。例如,在RPC代码中设置断点将导致问题,除非您的脚本需要格外小心。