使用GDB -tui时找不到Linux内核源代码?

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

我正在使用 Ubuntu 机器在 Qemu 中启动 Linux 内核。

我可以成功地在某些函数上设置断点,例如“start_kernel”。

但是,当为 GDB 启用 -tui 选项时,我在顶部窗口中收到“源不可用”错误。

我在 Linux 源代码文件夹中运行 GDB。

我使用以下命令来调用 GDB:

gdb -tui -ex '文件 vmlinux' -ex '目标远程本地主机:1234'

关于如何显示源代码有什么建议吗?

linux gdb qemu
1个回答
0
投票

如果您停在无法查看源代码的位置,那么您可以尝试使用

info source
命令,以下是其输出示例:

(gdb) info source
Current source file is hello.c
Compilation directory is /tmp
Source language is c.
Producer is GNU C17 9.3.1 20200408 (Red Hat 9.3.1-2) -mtune=generic -march=x86-64 -g3 -O0.
Compiled with DWARF 4 debugging format.
Includes preprocessor macro info.
(gdb) 

另一个有趣的设置是:

(gdb) show directories 
Source directories searched: $cdir:$cwd

directories
设置控制 GDB 查找源文件的位置。 默认值由
$cdir
(编译目录)和
$cwd
(当前工作目录)组成。

因此,在我们的示例中,源文件是

hello.c
,编译目录是
/tmp
。 如果我们当前的工作目录是
/root
那么 GDB 将按以下顺序查找以下位置:

  • /tmp/hello.c
  • /root/hello.c

如果您重复此实验并且您认为源文件应该是可定位的,那么您可以使用此信息更新问题。

如果源文件不位于 GDB 将检查的路径之一,那么您可以 (a) 将源文件移动到 GDB 可以找到它的位置,或者 (b) 告诉 GDB 源文件在哪里。

要执行 (b),我们使用

directory
命令,如下所示:

(gdb) directory /blah
Source directories searched: /blah:$cdir:$cwd

这已将

/blah/
添加到要检查的位置列表的开头,因此现在 GDB 将按以下顺序检查这些位置:

  • /废话/hello.c
  • /tmp/hello.c
  • /root/hello.c

如果您想从目录列表中删除条目,则可以使用

set directories
。 与仅将新条目添加到列表前面的
directories
命令不同,
set directories
允许您完全重写列表。

以上是最有可能解决源文件丢失的解决方案,但是GDB也有能力在需要时重写源路径。 GDB 源路径处理的完整文档可以在这里找到。

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