Repository navigation
ARD-DA 设计说明文档 #4
Irissssaa
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
1. 核心目标
DA 作为 VS Code 界面与 GDB 后端(Python 脚本)之间的“协调员”。其核心任务是将“破碎的物理执行帧”还原为“连续的逻辑异步生命线”。
2. UI 架构:“异步视察器”面板
面板使用 VS Code Webview 实现。
**A. 面板内容 **
async协程,绿色 代表sync同步函数)。CID、Poll Count(轮询次数)和State(状态码,如State: 3)。ardb.log中与当前选中的CID相关的最后几行记录,支持点击跳转。B. 变量展示策略
-stack-list-variables自动获取)。__state的含义、协程挂起地址等)。 细节:
当用户在面板点击某个协程节点时,DA 告诉 VS Code:“请将当前的
Selected Frame切换到这个协程对应的物理帧。”一旦物理帧切换成功,VS Code 原生的变量面板会自动刷新,显示出该协程内部的所有变量。
3. 按钮设计与命令映射
ardb-resetardb.log文件。ardb-gen-whitelistpoll函数并生成白名单。ardb-trace <sym>ardb-get-snapshot4. 通讯协议
DA 必须能够解析
ardb-get-snapshot输出的标准 JSON。快照数据示例:
{ "thread_id": 1, "path": [ { "type": "async", "cid": 1, "func": "minimal::nonleaf::{async_fn#0}", "addr": "0x7fffffffd0c4", "poll": 2, "state": 3 }, { "type": "sync", "cid": null, "func": "minimal::sync_a", "addr": "0x55555556a014", "state": "NON-ASYNC" } ] }5. 开发关键逻辑
A. 多根节点处理
_CO_NEXT_ID是唯一的全局计数器,确保不同树下的协程 ID 不冲突。B. 自动刷新机制
stopped事件(命中断点、单步跳过、暂停)时,DA 应自动执行ardb-get-snapshot。type: "sync"节点,以展示异步任务是如何跳转到同步代码执行的。C. 规范要求
null值或N/A状态(例如内存无法读取时)。D. ARD 追踪流程详细设计
第一阶段:白名单的生成与人工删减
ardb-gen-whitelist。poll_functions.txt文件。Ctrl+S)。poll_functions.txt被保存,自动触发一次ardb-load-whitelist。第二阶段:追踪入口的交互式选择
ardb-trace <sym>。All reactions