我在 gdb 中设置了一个断点,我想查看断点所在的确切源代码行,只是为了确认它是正确的 - 有没有快速的方法来做到这一点?
“info b”命令为我提供有关断点的信息,但它不显示源代码:
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x00000000006c3ba4 in MyClass::foo(bar*)
at /home/user1/src/MyClass.cpp:1021
我可以输入“list MyClass.cpp:1021”来查看此断点周围的行,但我想知道是否有更短的方法。谷歌搜索并阅读 gdb 手册没有找到任何结果。
我知道,如果我正在执行程序并到达断点,我只需键入“list”,但我要具体询问我不在断点处的情况(程序甚至可能没有运行) .
您可以使用
list
命令来显示源。 list
采用“linespec”,这是 break
接受的参数类型的 gdb 术语。 因此,您可以向其传递用于首先设置断点的任何参数(例如,list function
),也可以向其传递 info b
显示的文件和行(例如,list mysource.c:75
)。
有一种方法如下,(至少在GDB 13.1+中)仔细阅读以下内容:
help info break
首先,显示有问题的断点:
info break <breakpoint-number>
列出表达式$_的地址(最后显示的断点):
list *$_
简而言之:
i b <bp-number>
l *$_
将其组合成用户命令,将以下内容放入您的
~/.gdbrc
中,重新启动gdb,然后您可以运行命令listbr 2
来查看断点#2的列表。
define listbr
info br $arg0
list *$_
end
document listbr
listbr <n> list code at breakpoint <n>
end
我认为最接近的方法是打开历史记录 (
set history save on
),然后按 CTRL-R 对前一个 list
命令进行反向搜索。
更具体地说,在设置断点时更改您的工作流程。在每个像
b main
这样的命令之后,GDB 都会显示像 path/to/main.cpp, line 12
这样的源文件。立即快速使用此信息list main.cpp:12
。要稍后显示此位置,请按 CTRL-R 并输入“main”。
https://sourceware.org/gdb/onlinedocs/gdb/Command-History.html