我想在中设置一个“滚动”断点; 只需打印当前源代码行及相关信息,然后继续执行。我从以下内容开始:
这将导致10行清单,如下所示。
问题在于,输入
所以,我意识到可以通过使用程序计数器
break doSomething
commands
continue
end
仅此,将会打印出:
Breakpoint 1, doSomething () at myprog.c:55
55 void doSomething() {
我希望能去掉“Breakpoint X ... at ...”这个消息,可以通过使用 silent
来实现,并且只打印源代码行;因此我尝试了以下方法:
break doSomething
commands
silent
list
continue
end
这将导致10行清单,如下所示。
50 // some comments
...
55 void doSomething() {
...
59 // other comments
问题在于,输入
list 1
将再次给出10行,从第一行开始;而使用list +0,+0
确实只提供了一行源代码 - 但是是错误的那一行(在我的情况下,它给出了第50行)。所以,我意识到可以通过使用程序计数器
$pc
来获取和打印当前程序地址 - 鉴于可以围绕程序地址进行列表操作,因此我尝试了这个方法:break doSomething
commands
silent
#print $pc
list *$pc,+0
continue
end
这会导致正确的源代码行输出,但出现了额外的信息,这次是“ADDR 在 X 中…”:
0x8048fe0 is in doSomething (myprog.c:55).
55 void doSomething() {
有什么想法可以只打印源代码行吗?
作为一个子问题,是否有可能以某种方式捕获list命令的输出,并将其用作gdb脚本方言中printf的参数?(我相当确定通过python gdb脚本可以捕获gdb命令输出,但是)...