<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>项目全景 on OS Debug 文档</title><link>https://osdebugger.github.io/dev/</link><description>Recent content in 项目全景 on OS Debug 文档</description><generator>Hugo</generator><language>zh</language><atom:link href="https://osdebugger.github.io/dev/index.xml" rel="self" type="application/rss+xml"/><item><title>开发环境搭建</title><link>https://osdebugger.github.io/dev/dev-environment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://osdebugger.github.io/dev/dev-environment/</guid><description>&lt;h1 id="开发环境搭建">开发环境搭建&lt;a class="anchor" href="#%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba">#&lt;/a>&lt;/h1>
&lt;p>本文档说明如何获取插件源码并跑起来，面向想参与插件开发的开发者。&lt;/p>
&lt;h2 id="1-前置依赖">1. 前置依赖&lt;a class="anchor" href="#1-%e5%89%8d%e7%bd%ae%e4%be%9d%e8%b5%96">#&lt;/a>&lt;/h2>
&lt;p>插件开发需要以下环境：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># 使用命令检查是否安装成功：&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>npm -v &lt;span style="color:#75715e"># 版本在 9 以上&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>node -v &lt;span style="color:#75715e"># 版本在 18 以上&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果不存在，按以下提示安装：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo apt-get install -y nodejs&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="2-获取代码">2. 获取代码&lt;a class="anchor" href="#2-%e8%8e%b7%e5%8f%96%e4%bb%a3%e7%a0%81">#&lt;/a>&lt;/h2>
&lt;p>各仓库及其关系：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>仓库&lt;/th>
 &lt;th>说明&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://github.com/OSDebugger/osgdb">OSDebugger/osgdb&lt;/a>&lt;/td>
 &lt;td>跨特权级调试插件（当前主线，插件代码在 &lt;code>code-debug/&lt;/code> 目录下）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://github.com/OSDebugger/async-debug">OSDebugger/async-debug&lt;/a>&lt;/td>
 &lt;td>异步调试插件&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://github.com/WebFreak001/code-debug">WebFreak001/code-debug&lt;/a>&lt;/td>
 &lt;td>上游项目（开源的 GDB/LLDB 调试前端），OS Debug 在其基础上 fork 而来&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>以 osgdb 为例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>git clone https://github.com/OSDebugger/osgdb.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cd osgdb/code-debug
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>npm install
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>npm run compile&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="3-构建与调试插件">3. 构建与调试插件&lt;a class="anchor" href="#3-%e6%9e%84%e5%bb%ba%e4%b8%8e%e8%b0%83%e8%af%95%e6%8f%92%e4%bb%b6">#&lt;/a>&lt;/h2>
&lt;ol>
&lt;li>用 VS Code 打开 osgdb 仓库目录（仓库已内置 &lt;code>.vscode/launch.json&lt;/code>，配置了 Extension Development Host 启动方式，并带有 &lt;code>npm: compile&lt;/code> 前置任务）&lt;/li>
&lt;li>按 &lt;code>F5&lt;/code>，VS Code 会编译插件并弹出一个新的「扩展开发宿主」窗口&lt;/li>
&lt;li>之后的调试操作都在「扩展开发宿主」窗口中进行：打开调试目标工程（如 rCore-Tutorial-v3），按 &lt;code>F5&lt;/code> 即可开始调试&lt;/li>
&lt;/ol>
&lt;h2 id="4-打包-vsix">4. 打包 vsix&lt;a class="anchor" href="#4-%e6%89%93%e5%8c%85-vsix">#&lt;/a>&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>npm install -g @vscode/vsce
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cd osgdb/code-debug
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>vsce package&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>打包时会按 &lt;code>.vscodeignore&lt;/code> 排除 &lt;code>docs/&lt;/code> 等大型文件。&lt;/p></description></item><item><title>OSGDB 架构设计</title><link>https://osdebugger.github.io/dev/osgdb-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://osdebugger.github.io/dev/osgdb-architecture/</guid><description>&lt;h1 id="内核用户态协同调试设计与实现">内核用户态协同调试设计与实现&lt;a class="anchor" href="#%e5%86%85%e6%a0%b8%e7%94%a8%e6%88%b7%e6%80%81%e5%8d%8f%e5%90%8c%e8%b0%83%e8%af%95%e8%ae%be%e8%ae%a1%e4%b8%8e%e5%ae%9e%e7%8e%b0">#&lt;/a>&lt;/h1>
&lt;h2 id="基本介绍">基本介绍&lt;a class="anchor" href="#%e5%9f%ba%e6%9c%ac%e4%bb%8b%e7%bb%8d">#&lt;/a>&lt;/h2>
&lt;p>调试操作系统与调试普通程序的关键区别在于：普通程序只有一份 ELF 符号表，调试器加载后即可完成断点、单步、调用栈查看等操作；而操作系统运行时涉及内核态和用户态，两者使用不同的符号来源：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>状态&lt;/th>
 &lt;th>符号来源&lt;/th>
 &lt;th>典型代码&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>内核态&lt;/td>
 &lt;td>内核 ELF&lt;/td>
 &lt;td>&lt;code>kernel/src/...&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>用户态&lt;/td>
 &lt;td>用户程序 ELF&lt;/td>
 &lt;td>&lt;code>user_apps/...&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>当 CPU 在内核态运行时，用户程序源码断点不能直接命中；当 CPU 在用户态运行时，内核源码断点也不能简单按普通程序方式处理。OSGDB 的作用就是在内核态和用户态切换时，自动切换符号表和断点组。&lt;/p>
&lt;h2 id="调试后端">调试后端&lt;a class="anchor" href="#%e8%b0%83%e8%af%95%e5%90%8e%e7%ab%af">#&lt;/a>&lt;/h2>
&lt;p>整体链路：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>VS Code 前端 ←— DAP —→ 调试插件 ←— GDB/MI —→ GDB ←→ QEMU GDB stub / OpenOCD（JTAG + 真实硬件）&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;strong>DAP&lt;/strong>（Debug Adapter Protocol）：插件与 VS Code 调试界面交互的标准协议&lt;/li>
&lt;li>&lt;strong>GDB/MI&lt;/strong>：插件通过 GDB 的机器接口控制 GDB&lt;/li>
&lt;li>&lt;strong>调试目标&lt;/strong>：QEMU 的 GDB stub（&lt;code>-s&lt;/code> 参数开启，默认监听 1234 端口），或通过 OpenOCD 连接的 JTAG 真实硬件&lt;/li>
&lt;li>&lt;strong>远程 attach 模式&lt;/strong>：支持不带 &lt;code>qemuPath&lt;/code>/&lt;code>qemuArgs&lt;/code> 的 attach 配置——调试器只负责连接已在运行的 GDB stub，QEMU 需要预先手动启动&lt;/li>
&lt;/ul>
&lt;h2 id="内核用户态协同调试">内核/用户态协同调试&lt;a class="anchor" href="#%e5%86%85%e6%a0%b8%e7%94%a8%e6%88%b7%e6%80%81%e5%8d%8f%e5%90%8c%e8%b0%83%e8%af%95">#&lt;/a>&lt;/h2>
&lt;h3 id="1-状态机">1. 状态机&lt;a class="anchor" href="#1-%e7%8a%b6%e6%80%81%e6%9c%ba">#&lt;/a>&lt;/h3>
&lt;p>内核/用户态切换是一个复杂的异步流程：特权级变化、符号表切换、断点组恢复等操作需要按严格顺序执行。为此引入了状态机架构（&lt;code>OSStateMachine&lt;/code>），将整个切换流程建模为 4 种状态和 5 种事件的状态转移图；每次状态转移触发对应的动作序列（&lt;code>DebuggerActions&lt;/code>，共 8 种动作）。状态机的具体定义见源码。&lt;/p></description></item><item><title>异步调试设计与实现</title><link>https://osdebugger.github.io/dev/async-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://osdebugger.github.io/dev/async-architecture/</guid><description>&lt;h1 id="异步调试设计与实现">异步调试设计与实现&lt;a class="anchor" href="#%e5%bc%82%e6%ad%a5%e8%b0%83%e8%af%95%e8%ae%be%e8%ae%a1%e4%b8%8e%e5%ae%9e%e7%8e%b0">#&lt;/a>&lt;/h1>
&lt;h2 id="背景介绍">背景介绍&lt;a class="anchor" href="#%e8%83%8c%e6%99%af%e4%bb%8b%e7%bb%8d">#&lt;/a>&lt;/h2>
&lt;p>Rust 的 async 函数会被编译器转成状态机：函数调用时只创建异步实例，真正的执行发生在实例被 &lt;code>poll&lt;/code> 时——执行器每 poll 一次，状态机前进一小段，遇到未就绪的 &lt;code>.await&lt;/code> 就暂停并交出控制权。这使常规 GDB 给出的物理调用栈无法完整反映异步函数之间的调用关系：poll 返回后本次的物理栈帧即被销毁，实例之后可能在其他地方被继续 poll，此前的逻辑调用关系随之丢失。&lt;/p>
&lt;p>具体来说，物理调用栈存在三方面的问题：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>不完整&lt;/strong>：每次 poll 只推进状态机一小段，物理栈上只保留当前 poll 的片段。完整的逻辑调用链从未同时存在于物理栈上；&lt;/li>
&lt;li>&lt;strong>跨协程&lt;/strong>：同一个异步实例可以被先后多次 poll，同一逻辑调用链的不同片段出现在不同的物理栈上；&lt;/li>
&lt;li>&lt;strong>混杂&lt;/strong>：物理栈中混入执行器的调度帧，与业务逻辑的调用关系无关。&lt;/li>
&lt;/ul>
&lt;p>例如：&lt;code>nonleaf&lt;/code> 协程 &lt;code>.await&lt;/code> 了 &lt;code>async_fn_leaf&lt;/code>，后者又 &lt;code>.await&lt;/code> 了 &lt;code>another_branch&lt;/code>。GDB 停住时，物理栈上只有「执行器 → 某个协程 poll 函数的当前片段」。至于 &lt;code>nonleaf&lt;/code> 在等 &lt;code>async_fn_leaf&lt;/code>、&lt;code>async_fn_leaf&lt;/code> 又在等 &lt;code>another_branch&lt;/code> 这层等待关系，在物理栈上完全看不到。&lt;/p>
&lt;p>因此，调试异步程序需要回答两个问题：「这个协程正在等谁」，以及「控制流是怎样走到这里的」。前者称为&lt;strong>等待边&lt;/strong>（await edge，协程间 &lt;code>.await&lt;/code> 关系），后者称为&lt;strong>调用边&lt;/strong>（call edge，协程内同步函数间的调用关系）。&lt;/p>
&lt;h2 id="相关工作">相关工作&lt;a class="anchor" href="#%e7%9b%b8%e5%85%b3%e5%b7%a5%e4%bd%9c">#&lt;/a>&lt;/h2>
&lt;p>常见的异步调试/观测方案大多依赖特定运行时或需要修改源代码：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>方案&lt;/th>
 &lt;th>依赖特定运行时&lt;/th>
 &lt;th>修改源代码&lt;/th>
 &lt;th>输出形式&lt;/th>
 &lt;th>说明&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>tokio-console&lt;/td>
 &lt;td>是（仅支持 tokio）&lt;/td>
 &lt;td>是（引入 console-subscriber、开启 tokio_unstable）&lt;/td>
 &lt;td>交互式终端界面&lt;/td>
 &lt;td>Tokio 官方任务观测工具&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>async-backtrace&lt;/td>
 &lt;td>否&lt;/td>
 &lt;td>是（逐函数添加 &lt;code>#[framed]&lt;/code> 属性）&lt;/td>
 &lt;td>文本逻辑栈&lt;/td>
 &lt;td>异步函数的逻辑栈跟踪库&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>而不改源码的动态跟踪普遍被认为很困难：编译器不会为 &lt;code>.await&lt;/code> 生成足够完整的调试信息，poll 函数地址与状态机结构布局难以从调试信息中定位。&lt;/p></description></item><item><title>eBPF 动态跟踪设计</title><link>https://osdebugger.github.io/dev/ebpf-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://osdebugger.github.io/dev/ebpf-architecture/</guid><description>&lt;h1 id="基于-ebpf-的动态调试设计">基于 eBPF 的动态调试设计&lt;a class="anchor" href="#%e5%9f%ba%e4%ba%8e-ebpf-%e7%9a%84%e5%8a%a8%e6%80%81%e8%b0%83%e8%af%95%e8%ae%be%e8%ae%a1">#&lt;/a>&lt;/h1>
&lt;h2 id="背景">背景&lt;a class="anchor" href="#%e8%83%8c%e6%99%af">#&lt;/a>&lt;/h2>
&lt;p>GDB 静态断点调试需要暂停程序的执行，会干扰被调试对象的运行。eBPF 动态跟踪可以在不暂停程序的情况下收集运行时信息，与静态断点调试形成互补。&lt;/p>
&lt;h2 id="方案设计">方案设计&lt;a class="anchor" href="#%e6%96%b9%e6%a1%88%e8%ae%be%e8%ae%a1">#&lt;/a>&lt;/h2>
&lt;p>结合 GDB 断点与插桩的方式，设计基于&lt;strong>白名单&lt;/strong>的动态函数调用跟踪方法：通过白名单指定需要跟踪的函数，在函数被调用时收集运行时信息。&lt;/p>
&lt;p>项目设想还包括：在物理机器上利用 eBPF 机制，跟踪用户模式、内核模式和虚拟机监控模式的代码执行状态和数据结构信息。&lt;/p>
&lt;h2 id="历史工作">历史工作&lt;a class="anchor" href="#%e5%8e%86%e5%8f%b2%e5%b7%a5%e4%bd%9c">#&lt;/a>&lt;/h2>
&lt;p>第一阶段曾实现过 eBPF 调试面板（WebView）：连接 eBPF side-stub，查看并搜索内核/用户程序的符号表，选择函数地址注册 kprobe/uprobe，在探针触发时收集寄存器值等运行时信息。&lt;/p>
&lt;h2 id="当前状态">当前状态&lt;a class="anchor" href="#%e5%bd%93%e5%89%8d%e7%8a%b6%e6%80%81">#&lt;/a>&lt;/h2>
&lt;p>规划中。&lt;/p></description></item><item><title>贡献指南</title><link>https://osdebugger.github.io/dev/contributing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://osdebugger.github.io/dev/contributing/</guid><description>&lt;h1 id="贡献指南">贡献指南&lt;a class="anchor" href="#%e8%b4%a1%e7%8c%ae%e6%8c%87%e5%8d%97">#&lt;/a>&lt;/h1>
&lt;p>欢迎参与 OS Debug 的开发。本指南说明如何认领任务、提交代码，以及一些团队约定。&lt;/p>
&lt;h2 id="1-如何参与">1. 如何参与&lt;a class="anchor" href="#1-%e5%a6%82%e4%bd%95%e5%8f%82%e4%b8%8e">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>先阅读&lt;a href="https://osdebugger.github.io/">项目全景&lt;/a>与&lt;a href="roadmap">路线图&lt;/a>，了解各子项目当前状态与未来规划&lt;/li>
&lt;li>按照&lt;a href="dev-environment">开发环境搭建&lt;/a>把插件跑起来&lt;/li>
&lt;li>在&lt;a href="roadmap">路线图&lt;/a>的「未来规划」中挑选感兴趣的任务&lt;/li>
&lt;/ul>
&lt;h2 id="2-提-issue">2. 提 Issue&lt;a class="anchor" href="#2-%e6%8f%90-issue">#&lt;/a>&lt;/h2>
&lt;p>提交 issue 时请尽量包含：&lt;/p>
&lt;ul>
&lt;li>问题现象与复现步骤&lt;/li>
&lt;li>环境信息：操作系统、QEMU/GDB 版本、插件版本（commit）&lt;/li>
&lt;li>相关日志：调试控制台输出、&lt;code>code_debug_qemu_output_history.txt&lt;/code> 等&lt;/li>
&lt;/ul>
&lt;h2 id="3-提-pull-request">3. 提 Pull Request&lt;a class="anchor" href="#3-%e6%8f%90-pull-request">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>一个 PR 只做一件事，标题描述清晰&lt;/li>
&lt;li>修改后先本地验证：&lt;code>npm run compile&lt;/code> 通过、在调试目标上验证功能正常&lt;/li>
&lt;li>PR 描述中说明改了什么、为什么改、如何验证&lt;/li>
&lt;/ul>
&lt;h2 id="4-文档同步要求">4. 文档同步要求&lt;a class="anchor" href="#4-%e6%96%87%e6%a1%a3%e5%90%8c%e6%ad%a5%e8%a6%81%e6%b1%82">#&lt;/a>&lt;/h2>
&lt;p>&lt;strong>改了功能，必须同步改文档。&lt;/strong> 具体包括：&lt;/p>
&lt;ul>
&lt;li>插件行为、&lt;code>launch.json&lt;/code> 配置项变化 → 更新对应的使用教程与&lt;a href="https://osdebugger.github.io/docs/features">功能介绍&lt;/a>&lt;/li>
&lt;li>新增支持的调试目标 → 更新支持矩阵与对应教程&lt;/li>
&lt;li>阶段成果 → 更新&lt;a href="roadmap">路线图&lt;/a>与首页「最新动态」&lt;/li>
&lt;/ul>
&lt;p>这条约定是为了避免文档落后于代码，希望后续不再发生。&lt;/p></description></item><item><title>路线图</title><link>https://osdebugger.github.io/dev/roadmap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://osdebugger.github.io/dev/roadmap/</guid><description>&lt;h1 id="项目阶段工作">项目阶段工作&lt;a class="anchor" href="#%e9%a1%b9%e7%9b%ae%e9%98%b6%e6%ae%b5%e5%b7%a5%e4%bd%9c">#&lt;/a>&lt;/h1>
&lt;h2 id="第一阶段2022-2023">第一阶段：2022-2023&lt;a class="anchor" href="#%e7%ac%ac%e4%b8%80%e9%98%b6%e6%ae%b52022-2023">#&lt;/a>&lt;/h2>
&lt;blockquote class='book-hint '>
&lt;p>核心目标：从零构建操作系统源代码级调试工具，打通内核/用户态联合调试的基本链路。&lt;/p>&lt;/blockquote>&lt;ul>
&lt;li>基于开源的 GDB/LLDB 调试前端 &lt;a href="https://github.com/WebFreak001/code-debug">WebFreak001/code-debug&lt;/a> 进行 fork，实现 VS Code 扩展的基本架构（DAP 协议交互、GDB/MI 接口控制 GDB），支持 QEMU 虚拟机远程调试&lt;/li>
&lt;li>提出并实现&lt;strong>断点组&lt;/strong>核心概念：断点按所在地址空间分组，任意时刻只有当前地址空间对应的断点组生效；切换时符号表动态加载/卸载，实现内核态 ↔ 用户态的边界检测与自动切换；以 rCore-Tutorial 作为首个适配目标验证联合调试的可行性&lt;/li>
&lt;li>实现 eBPF 调试面板（WebView）与基于 eBPF 的内核态、用户态代码动态跟踪，与 GDB 静态断点调试形成互补&lt;/li>
&lt;li>实现内存读写、寄存器查看（RISC-V）、断点表展示等调试界面功能&lt;/li>
&lt;li>本阶段遗留问题：断点不在 VS Code 中显示、边界断点与内核符号表耦合、缺少单步步进、控制台输出杂乱、插件包过大、配置硬编码等，成为下一阶段的主要工作内容&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="第二阶段2023-2024">第二阶段：2023-2024&lt;a class="anchor" href="#%e7%ac%ac%e4%ba%8c%e9%98%b6%e6%ae%b52023-2024">#&lt;/a>&lt;/h2>
&lt;blockquote class='book-hint '>
&lt;p>核心目标：全面完善调试器的可用性和通用性，扩展对不同语言（C 语言）和不同运行环境（真实硬件）的支持。&lt;/p>&lt;/blockquote>&lt;h3 id="功能完善">功能完善&lt;a class="anchor" href="#%e5%8a%9f%e8%83%bd%e5%ae%8c%e5%96%84">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>修复第一阶段遗留问题：利用 &lt;code>debug.addBreakpoints&lt;/code> API 解决断点显示；边界断点重构为断点组的属性（支持 &lt;code>customRequest&lt;/code> 动态设置与右键菜单）；引入 &lt;code>OSStateMachine&lt;/code> 状态机架构（4 状态、5 事件、8 种动作）重构切换流程；实现单步步进与 Continue 按钮适配；优化控制台输出；插件包瘦身；配置文件去硬编码（引入 &lt;code>filePathToBreakpointGroupNames&lt;/code>、&lt;code>breakpointGroupNameToDebugFilePaths&lt;/code> 两个映射函数）&lt;/li>
&lt;/ul>
&lt;h3 id="新增功能">新增功能&lt;a class="anchor" href="#%e6%96%b0%e5%a2%9e%e5%8a%9f%e8%83%bd">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>钩子断点（Hook Breakpoints）：断点触发时执行自定义 JavaScript 函数，在进程调度处自动获取即将被调度的用户进程名称，返回值设置 &lt;code>nextBreakpointGroup&lt;/code>&lt;/li>
&lt;li>SSH 远程调试：密钥/密码认证、X11 转发、远程/本地源文件路径自动映射&lt;/li>
&lt;li>多进程调试：断点组动态创建，支持同时调试多个用户态进程&lt;/li>
&lt;li>更名为 &amp;ldquo;OS Debugger&amp;rdquo; 发布到 VS Code Extension Marketplace，发布 v2.0.0 里程碑版本&lt;/li>
&lt;/ul>
&lt;h3 id="新平台适配">新平台适配&lt;a class="anchor" href="#%e6%96%b0%e5%b9%b3%e5%8f%b0%e9%80%82%e9%85%8d">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>xv6（C 语言）&lt;/strong>：调试工具栏对所有语言可见；支持多边界断点（&lt;code>usys.S&lt;/code> 中多个 &lt;code>ecall&lt;/code> 出口）；编写 xv6 专用 &lt;code>launch.json&lt;/code> 模板（&lt;code>virt&lt;/code> 机器、128M 内存、2 SMP 核心）；适配用户程序命名规则（&lt;code>_filename&lt;/code>）与钩子断点&lt;/li>
&lt;li>&lt;strong>真实硬件（昉·星光 2 开发板）&lt;/strong>：通过 JTAG 接口集成 OpenOCD；实现 U-Boot 加载操作系统的调试流程；适配 DCSR 寄存器限制（边界断点设在 &lt;code>ecall&lt;/code> 前一条指令）&lt;/li>
&lt;/ul>
&lt;h3 id="工程化改进">工程化改进&lt;a class="anchor" href="#%e5%b7%a5%e7%a8%8b%e5%8c%96%e6%94%b9%e8%bf%9b">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>支持 RISC-V 汇编文件断点；寄存器查看（从上游合并）；一键安装脚本（Shell）；合并上游多项改进（静态变量支持、STL 容器解析修复、GDB Frame Filters 支持等）&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="第三阶段2024-2025">第三阶段：2024-2025&lt;a class="anchor" href="#%e7%ac%ac%e4%b8%89%e9%98%b6%e6%ae%b52024-2025">#&lt;/a>&lt;/h2>
&lt;blockquote class='book-hint '>
&lt;p>核心目标：提升调试器的稳定性和实用性，修复实际使用中的关键 bug，整理项目仓库，开展 Rust 异步调试功能的研究与开发。&lt;/p></description></item></channel></rss>