Contents

Cpptools

vscode-cpptools介绍

vscode-cpptools 是由微软官方开发的一款针对 Visual Studio Code(VS Code)的 C/C++ 语言支持扩展,全称为 C/C++ for Visual Studio Code。它为 C/C++ 开发者提供了丰富的语言服务和工具链集成,是 VS Code 中进行 C/C++ 开发的核心扩展之一。

/cpptools.png

vscode-cpptools 代码目录 本地代码路径

Extension
├─src
  ├─Debugger
    ├─attachQuickPick.ts  主要用于实现 "附加到进程" 的功能,提供了一个交互式界面让用户选择要调试的进程。
    ├─attachToProcess.ts  主要负责实现进程附加功能,允许用户将调试器附加到正在运行的进程上。
    ├─configurationProvider.ts
    ├─configurations.ts
    ├─debugAdapterDescriptorFactory.ts  创建和配置调试适配器描述符
    ├─extension.ts  扩展注册
    ├─nativeAttach.ts  本地进程附加功能
    ├─ParsedEnvironmentFile.ts
    ├─utils.ts

VS Code ←→ Debug Adapter(cpptools调用 OpenDebugAD7 / vsdbg.exe)←→ MIEngine(Visual Studio 的 MI 引擎)←→ gdb / lldb(以 MI 模式)

调试详细流程

1 用户在 VS Code 按 F5 / Run

  • 通过在launch.json中配置 cppvsdbgcppdbg 来控制使用哪种DA

2 启动 Debug Adapter

cpptools中 src-Debugger-debugAdapterDescriptorFactory.ts中定义了不同的DA描述工厂。根据配置调用OpenDebugAD7 / WindowsDebugLauncher等 实现Debug Adapter Protocol(DAP)的一端,和 VS Code 对话

WindowsDebugLauncher 的IO / 进程包装

负责以合适的方式启动 gdb、管理 stdin/stdout/stderr 的重定向(通常会把这些流写到临时文件名如 Microsoft-MIEngine-Out-*.zkv 等) 并把 pid/文件名等参数交给 MIEngine / 调试适配层

3 MIEngine 被初始化并成为“翻译器”

vscode-cpptools 通过调用MIEngine 实现c/c++ 调试 MIEngine 仓库地址

高层调试动作转成 GDB/MI 命令、解析 MI 输出、并管理调试会话

OpenDebugAD7 会把 DAP 的请求传给 MIEngine,MIEngine 负责和真实的 debugger(gdb / lldb)通信

4 MIEngine 启动并控制 gdb/lldb 进程(以 MI 模式)

  • MIEngine 启动一个 gdb(或 lldb-mi)子进程,带上 --interpreter=mi 或等价参数
  • MIEngine 向 gdb 发送 MI 命令(例如 -break-insert-exec-run),异步读取标准输出/错误里以 MI 格式返回的数据。
  • 解析这些数据,映射成DAP信息