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

使用VSCode调试Bochs中C++程序时反汇编视图仅显示??字节

解决VSCode调试Bochs中C++程序反汇编视图显示??的问题

核心原因

VSCode的cppdbg调试前端需要调试器明确提供符号与内存地址的映射关系,当前配置缺少必要的初始化指令,导致前端无法正确解析反汇编信息——但gdb命令行能正常执行disassemble /m,说明符号本身有效,只是VSCode未触发正确的符号加载流程。

具体修复步骤

1. 完善launch.json配置

在原配置基础上添加关键项,确保调试器正确加载符号并映射内存:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug",
      "type": "cppdbg",
      "request": "launch",
      "miDebuggerServerAddress": "localhost:1234",
      "program": "${workspaceFolder}/src/program/objs/showStack.exe",
      "symbolFile": "${workspaceFolder}/src/program/objs/showStack.exe", // 显式指定符号文件
      "args": [],
      "cwd": "${workspaceFolder}",
      "externalConsole": false,
      "MIMode": "gdb",
      "preLaunchTask": "OOS run",
      "disassemblyFlavor": "intel", // 可选:指定反汇编风格,也可设为att
      "setupCommands": [
        // 强制加载符号文件
        {
          "text": "-file-exec-and-symbols ${workspaceFolder}/src/program/objs/showStack.exe",
          "description": "Load target symbols"
        },
        // 明确指定目标架构(根据程序实际调整,如i386或x86_64)
        {
          "text": "-set architecture i386",
          "description": "Set target CPU architecture"
        }
      ]
    }
  ]
}

2. 调整Bochs的gdbstub配置

打开bochsrc.bxrc,确保gdbstub配置包含以下内容(根据程序实际加载地址修改text_base等值):

gdbstub: enabled=1, port=1234, wait=1, text_base=0x100000, data_base=0x100000, bss_base=0x100000
  • wait=1:让Bochs启动后暂停,等待gdb连接,避免VSCode连接时Bochs未准备就绪
  • text_base/data_base/bss_base:设置程序在Bochs内存中的加载基址,必须与程序实际加载地址一致,确保符号能正确映射到内存

3. 验证编译参数

确保编译程序时添加完整调试信息且未开启优化:

g++ -g -O0 -c your_source.cpp -o your_object.o
  • -g:生成调试符号
  • -O0:关闭优化,避免编译器重排代码导致反汇编与源码无法对应

4. 重启调试流程

  1. 停止当前Bochs进程和VSCode调试会话
  2. 重新执行OOS make编译程序
  3. 启动调试会话,此时VSCode的反汇编视图应能正常显示指令

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:40:26