You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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调试时的验证操作

  1. 启动带TUI界面的GDB:
gdb -tui ./hello
  1. 若仍未自动加载源码,手动指定源码目录(假设.asm文件在当前工作目录):
(gdb) directory ./
  1. 直接在源码行设置断点,强制GDB定位到原始汇编代码:
(gdb) break hello.asm:行号

替换行号为你需要断点的具体行。

额外注意事项

  • 确保.asm源码文件和GDB启动的工作目录一致,否则用directory命令指定正确路径。
  • 链接时不要加-s参数,该参数会剥离调试符号。
  • 如果TUI视图显示异常,执行layout src切换回源码视图,或重启GDB尝试。

内容的提问来源于stack exchange,提问作者CrazyBrocoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:05:26