使用GDB调试x86_64汇编代码时无法查看源代码的求助
NASM汇编GDB调试无法显示原始源码的解决方案
关键问题:NASM调试信息格式不匹配
你用NASM的-g参数生成的是stabs格式调试信息,现代GDB对这种格式的支持有限,尤其是和GCC链接后,容易出现源码无法加载的情况。需要明确指定生成DWARF格式的调试信息。
修正编译流程
1. 汇编阶段(NASM)
添加-g dwarf2参数(NASM 2.15.05支持DWARF2及以上版本,也可以用-g dwarf),生成带完整DWARF调试信息的目标文件:
nasm -f elf64 -g dwarf2 -o hello.o hello.asm
2. 链接阶段(GCC)
保持原有的-no-pie参数即可,无需额外加-g(目标文件已包含调试信息,GCC会自动保留):
gcc hello.o -o hello -no-pie
GDB调试时的验证操作
- 启动带TUI界面的GDB:
gdb -tui ./hello
- 若仍未自动加载源码,手动指定源码目录(假设
.asm文件在当前工作目录):
(gdb) directory ./
- 直接在源码行设置断点,强制GDB定位到原始汇编代码:
(gdb) break hello.asm:行号
替换行号为你需要断点的具体行。
额外注意事项
- 确保
.asm源码文件和GDB启动的工作目录一致,否则用directory命令指定正确路径。 - 链接时不要加
-s参数,该参数会剥离调试符号。 - 如果TUI视图显示异常,执行
layout src切换回源码视图,或重启GDB尝试。
内容的提问来源于stack exchange,提问作者CrazyBrocoli
相关产品推荐
相关产品推荐

