GNU gdb命令行调试程序在每个step
和next
命令之后打印它当前所在的行。考虑以下gdb会话,我将逐步介绍一些代码:
...
Temporary breakpoint 1, main (argc=1, argv=0x7fffffffd848)
at src/main.cc:3
3 int main(int argc, char **argv){
(gdb) next
4 Printf("Hello World\n"); // <--- disable this
(gdb)
5 printf("Hello World 2\n"); // <--- disable this
(gdb)
是否有禁用此打印的gdb设置?我知道这在技术上是可行的,因为gdb TUI具有我正在寻找的行为(可通过gdb命令set enable tui
访问)。
谢谢!
答案 0 :(得分:1)
我是通过重定向实现的:
define n
set logging file /dev/null
set logging redirect on
set logging on
next
set logging off
display
end
我发现使用next
(gdb的python API)捕获gdb.execute
的输出无效。我希望情况就是这样,因为源代码行不是由next
本身打印,而是由触发的停止事件打印。
答案 1 :(得分:0)
使用gdb CLI时,没有直接的方法可以执行此操作。处理向用户打印“停止”的代码不会检查用户可以设置的任何内容。
尝试解决此问题的一种方法是将n
别名为使用不同解释器运行命令的命令,例如interpreter-exec tui next
。我不确定这是否真的有效。
另一种实现此目的的方法是编写一个名为n
的Python命令,该命令使用gdb.execute
来调用next
- 同时捕获输出并忽略它。这种方法有点危险,因为有时你可能想要一些停止消息,而不是源显示。
最好的方法是修改gdb以添加新的set
命令来禁用源打印。这很容易做到。