有没有一种快速的方法可以在 gdb 中的断点处显示源代码?

Is there a quick way to display the source code at a breakpoint in gdb?

我在 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).

我认为最接近的方法是打开历史记录 (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