在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用debug-cpp
星标5
分支1
更新时间2026年5月31日 10:16
排查协程死锁、内存异常、协议交互错误、性能抖动等运行时问题时触发。
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
排查协程死锁、内存异常、协议交互错误、性能抖动等运行时问题时触发。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
写入新模块文档、重构模块、或用户要求分析模块时触发。
Bug 修复或对接问题排查确认有效后,将经验记录到知识库。
修改 PMR 分配器、内存池配置、热路径容器、对象生命周期管理代码后触发。
编写或修改性能基准测试、分析 benchmark 结果、优化热路径性能时触发。
新增或修改 enable_shared_from_this 类、co_spawn 调用、shared_ptr 捕获的 lambda、co_await 后的成员访问时触发。
新增或修改原子操作、异步定时器、无锁通道、跨线程状态同步、CAS 竞争相关代码时触发。
| name | debug-cpp |
| description | 排查协程死锁、内存异常、协议交互错误、性能抖动等运行时问题时触发。 |
排查运行时 bug、协程挂起、内存泄漏、协议握手失败、性能异常时。
确定三个维度:
| 检查项 | 方法 |
|---|---|
| co_await 永不完成 | 检查被等待对象是否有完成路径(定时器超时、channel 关闭) |
| io_context 被阻塞 | 检查协程中是否有阻塞操作(sleep_for、同步 DNS、文件 I/O) |
| strand 跨线程操作 | 确认同一对象的所有操作在同一条 strand 上 |
| 对象被提前销毁 | co_await 恢复后 this / 成员引用是否悬挂 |
| 现象 | 排查方向 |
|---|---|
| PMR 内存持续增长 | 检查 frame_arena 是否缺少 reset();检查长生命周期容器是否有淘汰 |
| 悬挂引用崩溃 | 检查 co_await 后是否使用了旧迭代器/引用/裸指针 |
| shared_ptr 循环 | co_spawn lambda 是否按值捕获 self(shared_ptr) |
| use-after-free | erase() 后是否使用返回值更新迭代器 |
| 检查项 | 方法 |
|---|---|
| 握手失败 | 用 MockTransport 注入对端字节序列精确复现 |
| 字节序错误 | 网络字节序(大端)vs 主机字节序检查 |
| 部分读取 | async_read_some 可能返回部分数据,需循环读取 |
| 缓冲区残留 | 预读(preview)数据是否正确传递给下一层 |
1. 跑 bench 确认基线(bench-perf skill)
2. 定位热点(VTune / Windows Performance Analyzer / VerySleepy)
3. 检查 PMR 路径:是否走了系统 malloc 而非池分配
4. 检查锁竞争:是否有 mutex(应替换为 atomic/strand/post)
5. 检查内存分配频率:热路径是否频繁构造临时对象
| 工具 | 用途 | 备注 |
|---|---|---|
| spdlog 日志 | 运行时行为追踪 | trace::config 控制级别和格式 |
| ASAN | 内存错误检测 | PRISM_ENABLE_ASAN=ON 编译。MinGW ASAN 可能遗漏部分错误类别(如 stack-use-after-scope),Clang ASAN 覆盖更全 |
| Google Benchmark | 性能回归对比 | bench-perf skill |
| GDB (MinGW) | 断点/协程帧检查 | gdb build/src/Prism.exe,info coroutines 查看协程帧(需 GCC 12+) |
| WinDbg | Windows 原生调试 | 崩溃转储分析、线程栈检查 |
| VTune | CPU 热点分析 | Intel CPU 性能分析 |
| MockTransport | 协议交互复现 | 精确注入字节序列 + 错误注入 |
# 调整日志级别(在 configuration.json trace 节)
"log_level": "debug" # 开启详细日志
"pattern": "[%Y-%m-%d %H:%M:%S.%e] [%l] [%t] %v"
# 过滤特定模块
# 在日志输出中 grep 模块名/连接 ID
sleep 调试(用 spdlog 日志代替)printf/cout 调试(用 psm::trace::info/error)相关 skill:
write-test提供了 MockTransport 精确注入数据的方法 相关 skill:bench-perf提供了性能基线对比的方法 相关 skill:coroutine-audit提供了协程纯度检查清单 相关 skill:audit-memory提供了 PMR 内存审计清单