用途:在需要交互式调试源码时使用,例如程序崩溃、抛出意外异常、输出错误,或需要弄清执行是如何到达某个状态的;当反复加打印语句不够快时改用调试器直接观察实际取值和路径。
主要能力:可让运行中的程序暂停在任意位置,读取该时刻的实时变量值与调用栈,逐行向前或跳到下一个断点,并对活动进程求值任意表达式而无需重启。支持条件断点与不变量断点(用条件当运行时断言)。
安装:该技能依赖 dap 命令行工具,它以后台守护进程方式通过 DAP 协议与调试器交互并维护调试状态。安装前先检查 command -v dap,未安装时先询问/告知用户。安装方式:brew install AlmogBaku/tap/dap;或 bash scripts/install-dap.sh;或 go install github.com/AlmogBaku/debug-skill/cmd/dap@latest。
用法示例:dap debug <file> 在调试器下启动程序,后端按文件扩展名自动识别;用 --break 指定断点,如 dap debug script.py --break script.py:42,条件断点需加引号:dap debug script.py --break "script.py:42:x > 5";多文件可用多个 --break;无假设时用 --stop-on-entry(大项目不建议);异常位置未知时用 --break-on-exception raised(Python)或 all(Go/JS);附加到远程进程用 dap debug --attach host:port --backend <name>,附加到已运行进程用 dap debug --pid <PID> --backend <name>。会话隔离用 --session <name>。
执行控制:dap step、dap step in、dap step out、dap continue、dap continue --to file:line、dap context、dap output、dap inspect <var> --depth N、dap pause、dap restart、dap threads、dap thread <id>;求值用 dap eval "<expr>",可用 --frame 1 查看调用方。断点管理中段可增删:dap continue --break app.py:50、dap continue --remove-break app.py:20、dap break add/list/clear。
适用场景:崩溃与异常定位、错误输出排查、理解执行路径、用户流程复现、并发或挂起问题(高级场景见 references/advanced-techniques.md)。限制与注意:仅在上游来源与本地项目上下文明确匹配时使用;应用改动前需验证命令、生成代码、依赖、凭据与外部服务行为;示例不能替代环境测试、安全审查或对破坏性/高成本操作的用户批准。macOS 下对 Go 使用 dlv --pid 需关闭 SIP(csrutil disable),建议改为在调试器下启动或附加远程调试器。避免调用有副作用的求值表达式,以免污染调试状态;断点落在无效行或适配器调整位置时 dap 会给出警告。