VSCode Native Debug调试C程序如何显示汇编代码查看执行指令
运行环境
- VSCode:
vscode 1.67.2 - native-debug扩展:
native-debug 0.26.0
问题说明
调试C语言编写的应用时,需要查看当前正在执行的汇编指令。原生gdb终端环境下可通过layout asm命令开启汇编布局,配合si命令单步遍历所有汇编指令;但在VSCode调试控制台执行layout asm命令无法生效,无法同时查看源代码与编译后汇编,需要实现在独立窗口显示汇编代码、追踪当前执行指令的效果。

可行方案
layout asm是gdb TUI文本交互界面的专属命令,VSCode通过MI机器接口与gdb通信,不支持gdb TUI类指令,所以直接执行该命令无效,可通过以下两种方式实现需求:
方案一:使用VSCode内置反汇编视图(零配置,推荐)
- 正常启动调试,程序触发断点处于暂停状态时,按下
Ctrl+Shift+P(macOS系统按Cmd+Shift+P)调出命令面板 - 搜索并执行
Open Disassembly View(打开反汇编视图),即可弹出独立的汇编代码窗口 - 该窗口会自动高亮标记当前正在执行的汇编指令,使用调试工具栏的指令级单步进入功能,或在调试控制台输入
si执行单步时,窗口会自动跟随执行位置跳转;同时支持和源码窗口联动,点击汇编行可直接跳转至对应的源码位置,将反汇编窗口拖到编辑器侧边分屏,即可同时查看源码和汇编内容。
方案二:直接通过gdb指令输出汇编内容
如果不需要图形化的跟随视图,可直接在调试控制台执行原生gdb指令查看汇编:
- 查看当前函数完整汇编:执行
disassemble - 查看当前执行位置往后的指定条数汇编:执行
x/10i $pc,命令中数字10可按需修改,代表打印从程序计数器$pc位置开始的10条汇编指令 - 配置单步自动打印汇编:依次执行以下命令即可实现每次调试暂停时自动输出当前位置附近的汇编:
define hook-stop x/5i $pc end
内容的提问来源于stack exchange,提问作者St.Antario
相关产品推荐
相关产品推荐

