【发布时间】:2021-05-20 12:35:34
【问题描述】:
我正在重新编译-调试循环中进行调试,如下所示:
- 编译二进制
- 运行调试器
gdb prog - 查找错误并修复源
- 按
ctrl+d或键入quit退出调试器
我想在工作流中添加 Valgrind,以便在我遇到不正确的超出范围的内存读取或写入时立即中断。我发现如果我按照officially documented 使用 gdb 运行 Valgrind 的过程,我必须执行更多耗时的步骤。
- 编译二进制
- 运行 valgrind
valgrind --vgdb=yes --vgdb-error=0 prog - 打开新的终端窗口并输入
gdb prog -
运行
target remote | vgdb(或者,更糟糕的是,如果我正在运行多个调试会话,则在 valgrind 窗口中打印的连接的复制粘贴命令) - 查找错误并修复源
- 退出调试器
-
使用
kill -9使用valgrind 进程终止应用程序 (because Valgrind doesn't stops it on gdb exit)
如何自动执行这 3 个额外步骤?理想情况下,我希望有一个像mygdb 这样的命令作为gdb 的直接替代品,它在后台运行Valgrind,可能调试速度较慢,但一旦Valgrind 检测到错误就会中断。
【问题讨论】: