我有多个不同的进程通过 IPC 进行通信,当使用 gdb 调试单个进程时,每当遇到断点时,我都会尝试向其他进程发送消息。有没有一种方法可以自动在遇到断点时自动调用一个函数/一段代码(NotifyAll())无需手动运行命令
并调用gdb 控制台中的函数。
基本上,每当 gdb 调试器附加到这些进程之一时,我希望 gdb 知道它应该在遇到断点(应用程序范围)时调用 NotifyAll()。
最佳答案
是的,这可以使用 gdb 中的 Python 脚本功能来完成。
特别是您想要向 gdb.events.stop
添加一个监听器来检查断点停止事件,然后调用您的函数。有可能(我不知道)您必须通过将事件发布到 gdb 事件循环来推迟函数的调用。
为了尽可能减少手动干预,请使用 gdb 脚本自动加载功能将此 Python 脚本与您的应用程序相关联。这将要求用户信任该脚本(阅读有关 add-auto-load-safe-path
的信息),仅此而已。
请注意,这样做可能会使试图调试您的应用程序的人感到困惑。例如,除非您的脚本格外小心,否则在 RPC 代码中设置断点会导致问题。
关于c++ - 命中 GDB 断点时自动调用应用程序代码中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42445377/