GDB 在 Docker 容器中不显示源代码行

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

我第一次在 Docker 容器中运行程序。该程序是一个用 C 语言编写的 .exe,它调用用 NASM 编写的共享对象。程序是在容器外部编写和调试(使用 GDB)的。

当容器启动时,我安装 GCC、NASM、GDB:

apt-get update && apt-get install -y build-essential
apt-get update && apt-get install -y gcc
apt-get update && apt-get install -y gdb
apt-get update && apt-get install -y nasm

在 Docker 容器内,我像平常一样从 shell 脚本运行 GDB。该脚本汇编并链接 NASM,然后使用 GDB 调用 .exe 文件。 NASM 用 dwarf 符号组装:nasm -f elf64 -g -F dwarf Complex_Calc_YZ.asm。

问题是,当我单步执行时,GDB 显示了 C 程序中的源代码行,但在 NASM 程序中,源代码行不显示。像往常一样,源文件包含在工作目录中。必要的数据文件都位于主机文件系统上的卷安装中。

所以我遵循了我已经使用了很长时间的设置,但是第一次在 Docker 容器中运行它时我遇到了这个问题。

在 Docker 容器中安装 GDB 时还需要做什么吗?

非常感谢您对此提供的任何帮助。

docker gdb nasm
1个回答
0
投票

我解决了这个问题,所以我在这里发布解决方案。 Peter Cordes 在 GDB does not load sourcelines from NASM.

的一个非常有用的答案解决了这个问题。

Ubuntu 22.04 使用 apt install nasm 时安装 NASM 2.15.05。但 2.15.05 上有一个已知错误会破坏 DWARF 调试符号。该错误已于 2.16.01 修复,请参阅https://nasm.us/doc/nasmdocc.html

解决方案是从源安装 NASM 2.16.01。我按照 Michael Petch 的在 Ubuntu 上离线安装 NASM 的步骤? 提供的非常有用的说明来完成此操作。这些是他的说明,已更新以下载并安装 2.16.01。

sudo apt-get 删除 nasm 哈希-d nasm

wget http://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.bz2 tar xfj nasm-2.16.01.tar.bz2 cd nasm-2.16.01/ ./autogen.sh ./configure --prefix=/usr/local/ 制作 须藤进行安装 哈希-d nasm

现在,当我单步执行 NASM 文件时,我可以看到源代码行。请注意,这必须在容器内完成,而不是在主机上。

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