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

问题描述 投票:0回答:3

我在 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”,但我要具体询问我不在断点处的情况(程序甚至可能没有运行) .

gdb
3个回答
15
投票

您可以使用

list
命令来显示源。
list
采用“linespec”,这是
break
接受的参数类型的 gdb 术语。 因此,您可以向其传递用于首先设置断点的任何参数(例如,
list function
),也可以向其传递
info b
显示的文件和行(例如,
list mysource.c:75
)。


2
投票

有一种方法如下,(至少在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

0
投票

我认为最接近的方法是打开历史记录 (

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

© www.soinside.com 2019 - 2024. All rights reserved.