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

如何让GDB正确打印64位变量?NASM编译场景调试求助

解决GDB调试64位NASM代码时var_h符号显示异常的问题

我之前调试64位NASM汇编代码时也碰到过几乎一模一样的问题,给你几个针对性的解决思路:

  • 明确符号的类型信息,让GDB正确识别64位变量
    NASM默认生成的DWARF调试信息里,有时候不会明确告诉GDB变量的长度类型。你可以在代码里给var_h加上类型和大小声明:

    var_h: dq -1
    .type var_h, @object   ; 标记为对象类型
    .size var_h, 8         ; 指定大小为8字节(64位)
    

    重新编译后,GDB就能正确识别var_h是64位变量,直接执行print var_h就会输出完整的8字节值,不会再截断成32位。

  • 强制指定类型查看,无需修改代码
    如果不想改动汇编代码,你可以在GDB里用强制类型转换来查看完整的64位值:

    print *(long long *)&var_h
    # 或者用标准的64位整数类型
    print (int64_t)var_h
    

    这样GDB会忽略默认的类型猜测,按你指定的64位类型解析变量值。

  • 修复x命令的用法
    你之前用的x \1gx $var_h有两个问题:

    1. 语法错误:x命令的格式符应该用正斜杠而非反斜杠,正确格式是x/<数量>/<格式>/<单位>
    2. 逻辑错误:$var_h是变量的值,而x命令需要的是内存地址。你应该用&var_h获取变量的内存地址,再用x命令读取该地址的8字节内容:
      x/1gx &var_h
      # 或者省略数量1,直接用x/gx &var_h(默认读取1个单位)
      

    这样就能正确打印出var_h的完整64位十六进制值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:36:55