GDB:在每一步之后禁用当前行的打印

时间:2017-04-08 14:25:46

标签: gdb

GNU gdb命令行调试程序在每个stepnext命令之后打印它当前所在的行。考虑以下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访问)。

谢谢!

2 个答案:

答案 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命令来禁用源打印。这很容易做到。