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

NASM使用%line指令生成DWARF调试信息行号不符问题

问题成因
  • 行号整体+1:NASM 默认的 %line n filename 语义为将 %line 指令所在行的逻辑行号设为n,后续每一行(包括空行、指令行)的逻辑行号自动+1。你写的 %line 1 test.txt 所在行对应逻辑行1,下一行的 PUSH 1337 就自动对应逻辑行2,和你观测到的现象完全吻合。
  • RET 额外出现13号行:你最后一条 %line 10 test.txt 对应逻辑行10,下一行的 POP RAX 对应11,之后的两条空行分别对应12、最后一行的 RET 就对应13,所以出现了多余的13号行记录。
解决方法
  • 调整%line写法:使用带加号的 %line n+ filename 语法,该语法明确指定n为 %line指令后第一条非空行的逻辑行号,完全符合你的预期。修改后对应的汇编代码如下:
global main

section .text

main:

%line 1+ test.txt
PUSH 1337

%line 2+ test.txt
PUSH 1338

%line 3+ test.txt
PUSH 1339
%line 8+ test.txt
POP RAX
%line 9+ test.txt
POP RAX
%line 10+ test.txt
POP RAX

RET
  • 处理RET的多余行号:如果不需要RET关联调试行号,可以在RET前加 [DEBUG LINES OFF] 关闭行号记录;如果需要指定RET的行号,直接在RET前加对应 %line n+ test.txt 即可;也可以将RET紧接在最后一条 POP RAX 之后,避免空行带来的行号自动递增。
  • 替代方案:如果你不想修改%line语法,也可以直接把所有%line后的数值减1编写,比如要指定后续指令对应行1,就写 %line 0 test.txt,也能达到相同效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:24:02