GDB:在每个步骤后禁用当前行的打印

GDB:在每个步骤后禁用当前行的打印,gdb,Gdb,GNU gdb命令行调试器在每个步骤和下一步命令后打印当前所在的行。考虑下面的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"); // <--- disabl

GNU gdb命令行调试器在每个
步骤
下一步
命令后打印当前所在的行。考虑下面的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) 
。。。
临时断点1,main(argc=1,argv=0x7fffffd848)
在src/main.cc:3
3内部主(内部argc,字符**argv){
(gdb)下一步

4 Printf(“Hello World\n”);//在使用gdb CLI时,没有直接的方法可以做到这一点。处理向用户打印“stop”的代码不会检查用户可以设置的任何内容

您可以尝试解决此问题的一种方法是将
n
别名为一个命令,该命令使用不同的解释器运行该命令,如
解释器exec tui next
。我不确定这是否真的有效

实现这一点的另一种方法是编写名为
n
的Python命令,该命令使用
gdb.execute
调用
next
——同时捕获输出并忽略它。这种方法有些危险,因为有时您可能确实需要一些停止消息,而不是源显示


最好的方法是修改gdb以添加新的
set
命令来禁用源打印。这很容易做到。

我通过重定向实现了这一点:

define n
    set logging file /dev/null
    set logging redirect on
    set logging on
    next
    set logging off
    display
end

我发现使用
gdb.execute
(gdb的pythonapi)捕获
next
的输出不起作用。我希望是这样的,因为源代码行不是由
next
本身打印的,而是由触发的停止事件打印的。

我注意到,在使用未更改的gdb时,它能够实现这一点。关于它们是如何实现的,有什么线索吗?cgdb是一个包装器,因此它可以按照自己喜欢的方式过滤输出。因此,这大概就是它所做的-bu我只是猜测,我从来没有看过cgdb源。当执行
解释器执行控制台next
时,打印源位置被“禁用”。不幸的是,当将此命令放入函数(
define n\n解释器执行控制台next\n end
)时,gdb会生成一个segfault。有什么想法吗?