GDB:在每个步骤后禁用当前行的打印
GNU 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
步骤
和下一步
命令后打印当前所在的行。考虑下面的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。有什么想法吗?