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

在VS Code中调试NASM时如何查看自定义变量?

在VS Code中调试NASM时查看自定义变量的方法

已在Linux系统的VS Code中配置好NASM调试环境,单步调试时寄存器值可正常更新,但希望在监视窗口中查看.data段的自定义变量(例如以下代码中的hello字符串),像查看C语言数组一样随调试步骤更新:

section .data
     hello db 'Hello, World!',0

尝试过hello、hello, <length>、hello[length]等添加方式,结果均显示hello:<blank>。

补充GDB命令行测试结果

  • info variables:变量被列在非调试符号下(同列的还有__bss_start、_edata、_end)
  • info symbol <name>:提示<name>类型未知,需转换为声明类型
  • info symbol (char[])<name>:提示求值要求程序包含malloc函数
  • info symbol (char*)<name>:无匹配(char*)<name>的符号
  • info symbol <address>:能识别<name>位于程序的.data段中,但直接访问内存地址时提示无法访问

可行解决方案

核心问题是NASM默认编译未生成带类型信息的调试符号,导致GDB无法自动解析变量类型。按以下步骤操作即可解决:

  1. 编译时添加调试符号
    使用NASM编译时加入调试参数,生成DWARF格式的调试信息(GDB标准支持格式):

    nasm -f elf64 -g -F dwarf hello.asm -o hello.o
    ld -o hello hello.o
    

    注:如果程序需要链接C标准库,可改用gcc -o hello hello.o,但需注意将入口点设为main而非默认的_start。

  2. VS Code监视窗口的正确写法

    • 查看以0结尾的字符串:添加监视项(char *)hello,GDB会自动显示到终止符的完整字符串
    • 查看指定长度的字符数组:添加监视项*(char (*)[13])hello(13为Hello, World!的字节数,含终止符可设为14),强制将地址转换为对应长度的字符数组类型
    • 直接查看内存内容:添加监视项x/13cb hello,其中x是GDB内存查看命令,13为查看数量,c表示以字符格式显示,b表示按字节单位
  3. GDB命令行验证
    编译完成后启动GDB,输入以下命令可直接查看变量:

    print (char *)hello       # 显示字符串内容
    print *(char (*)[13])hello # 显示数组形式的内容
    x/13cb hello              # 以字符格式查看内存
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:57:09