AI 辅助调试
wescode 将 AI 的代码理解能力与 CKG 代码图谱、终端执行、编辑器上下文结合,提供强大的调试支持。
错误诊断
直接粘贴错误
最简单的调试方式——把错误信息发给 AI:
用户:
runtime error: invalid memory address or nil pointer dereference
goroutine 1 [running]:
main.(*Server).handleRequest(...)
server.go:42
AI 行为:
1. 读取 server.go:42 附近的代码
2. 分析 nil pointer 的来源
3. 追踪调用链找到根因
4. 提供修复方案
编译错误修复
用户:
go build 报了这些错误,帮我修复
AI 行为:
1. 执行 go build,获取完整错误列表
2. 按依赖顺序排列修复顺序
3. 逐个修复
4. 重新构建验证
调试策略
自动化调试流程
AI 会按以下流程调试问题:
错误报告
↓
1. 复现问题(运行代码/测试)
↓
2. 定位代码(CKG 搜索 + read_file)
↓
3. 分析根因(调用链追踪)
↓
4. 提出修复方案
↓
5. 应用修复(edit_file)
↓
6. 验证修复(重新运行)
CKG 辅助调试
CKG 代码图谱在调试中提供:
| 能力 | 调试用途 |
|---|---|
| 调用图查询 | 找到所有调用出错函数的地方 |
| 影响分析 | 修复后影响哪些代码 |
| 符号搜索 | 快速定位相关类型/接口 |
| 依赖追踪 | 找到数据流经的路径 |
测试调试
测试失败分析
用户:"TestCreateUser 测试失败了"
AI 行为:
1. 运行 go test -run TestCreateUser -v
2. 分析失败输出
3. 对比 expected vs actual
4. 读取被测函数
5. 定位差异原因
6. 修复代码或测试
7. 重新运行验证
间歇性失败
用户:"这个测试有时候通过有时候失败"
AI 行为:
1. 分析测试代码中的竞态条件
2. 检查共享状态和并发访问
3. 检查时间依赖(timeout、sleep)
4. 检查外部依赖(网络、文件系统)
5. 提供稳定化方案
性能调试
性能分析
用户:"这个接口响应很慢,帮我分析"
AI 行为:
1. 读取接口处理代码
2. 识别可能的性能瓶颈:
- N+1 查询
- 大循环中的 IO
- 不必要的序列化
- 缺失的索引
3. 使用 CKG 追踪调用深度
4. 建议优化方案
5. 应用优化
6. benchmark 验证
内存问题
用户:"程序运行一段时间后 OOM"
AI 行为:
1. 搜索可能的内存泄漏模式:
- 未关闭的资源
- 持续增长的 map/slice
- goroutine 泄漏
- 缓存无上限
2. CKG 分析资源生命周期
3. 建议修复 + 验证
日志分析
日志定位
用户:(粘贴一段日志)
"ERROR: connection refused to database"
AI 行为:
1. 搜索日志消息来源(grep / search_files)
2. 找到产生该日志的代码位置
3. 分析连接配置
4. 检查重试/降级逻辑
5. 给出解决方案
结构化日志
AI 理解结构化日志格式:
{"level":"error","msg":"handler failed","err":"context deadline exceeded","handler":"CreateUser","latency_ms":30042}
分析:handler 超时,检查 CreateUser 的数据库操作和超时设置。
环境问题
依赖问题
用户:"go mod tidy 报错 / npm install 失败"
AI 行为:
1. 分析错误信息
2. 检查 go.mod / package.json
3. 识别版本冲突
4. 建议解决方案
5. 执行修复命令
配置问题
用户:"部署到测试环境后不工作了"
AI 行为:
1. 检查配置文件
2. 对比开发/测试环境差异
3. 检查环境变量
4. 验证连接参数
5. 逐步排查
复杂调试场景
并发 Bug
AI 利用代码图谱和执行环境调试并发问题:
用户:"有时会出现数据不一致"
AI 行为:
1. CKG 搜索共享状态的读写路径
2. 分析锁的使用模式
3. 检查 channel 的关闭顺序
4. 识别竞态窗口
5. 使用 go vet -race 标志建议
6. 提供修复方案
跨服务调试
用户:"Service A 调用 Service B 时偶尔超时"
AI 行为:
1. 读取 A 的调用代码
2. 检查超时设置
3. 分析 B 的处理链路
4. 检查中间件/拦截器
5. 建议调整
调试工具集
AI 使用的调试工具
| 工具 | 用途 |
|---|---|
exec | 运行测试、编译、诊断命令 |
read_file | 查看源码 |
search_files | 搜索错误来源 |
grep | 精确匹配搜索 |
| CKG 查询 | 调用链追踪 |
常用调试命令
AI 会自动选择合适的命令:
# Go
go test -run TestXxx -v -count=1
go build ./...
go vet ./...
dlv debug ./cmd/server
# Node
npm test -- --grep "test name"
npx tsc --noEmit
# 通用
git diff HEAD~1 # 最近改了什么
git log --oneline -10 # 最近提交
最佳实践
高效的调试提问
| 好的提问 | 差的提问 |
|---|---|
| "TestX 失败了,错误是 Y,相关代码在 Z" | "测试挂了" |
| "接口 /api/users 返回 500,日志显示..." | "服务器报错" |
| "这段代码在并发时会 panic:(贴代码)" | "代码有 bug" |
调试建议
- 提供完整的错误信息(不要截断)
- 说明复现步骤
- 指出相关文件路径(用
@引用) - 告诉 AI 已经尝试过什么
- 让 AI 用 exec 实际运行和验证
注意事项
- 调试过程中的 exec 命令走三分类路由(检索/验证/交互)
- AI 不会自动运行危险命令(如删除数据库)
- 大量日志输出会被自动截断(保留关键部分)
- 并发 bug 调试建议在 Git 工作树干净时进行
- 生产环境数据不应粘贴到对话中