在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无法自动解析变量类型。按以下步骤操作即可解决:
编译时添加调试符号
使用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。VS Code监视窗口的正确写法
- 查看以0结尾的字符串:添加监视项
(char *)hello,GDB会自动显示到终止符的完整字符串 - 查看指定长度的字符数组:添加监视项
*(char (*)[13])hello(13为Hello, World!的字节数,含终止符可设为14),强制将地址转换为对应长度的字符数组类型 - 直接查看内存内容:添加监视项
x/13cb hello,其中x是GDB内存查看命令,13为查看数量,c表示以字符格式显示,b表示按字节单位
- 查看以0结尾的字符串:添加监视项
GDB命令行验证
编译完成后启动GDB,输入以下命令可直接查看变量:print (char *)hello # 显示字符串内容 print *(char (*)[13])hello # 显示数组形式的内容 x/13cb hello # 以字符格式查看内存
内容的提问来源于stack exchange,提问作者ismqdb
相关产品推荐
相关产品推荐

