AI 辅助调试
wescode 内置智能调试助手,能够分析错误信息、追踪问题根因、提供修复方案,大幅缩短排查时间。
功能概览
| 能力 | 说明 |
|---|---|
| 错误诊断 | 自动分析编译错误、运行时异常、类型错误 |
| 日志分析 | 从日志中提取关键信息,定位异常模式 |
| 断点建议 | 根据代码结构推荐最佳调试断点位置 |
| 堆栈追踪 | 解析堆栈信息,定位问题源头 |
| 修复方案 | 生成可直接应用的修复代码 |
错误诊断
编译错误修复
当项目出现编译错误时,wescode 会自动分析错误信息并给出修复建议:
- 打开终端面板,运行构建命令(如
go build ./...) - 编译错误会自动被 wescode 捕获
- 在 Chat 面板中输入
/fix或描述错误现象 - AI 会分析错误上下文,给出精准修复
用户:build 失败了,提示 undefined: UserService
AI:分析错误上下文后发现:
1. UserService 定义在 internal/service/user.go
2. 当前文件缺少 import "project/internal/service"
→ 已自动添加 import 语句
运行时异常
对于运行时 panic、空指针、越界等异常:
- 粘贴错误输出到 Chat 面板
- AI 会结合 CKG(代码知识图谱)分析调用链
- 定位到产生异常的根本原因,而不仅是触发点
类型错误诊断
wescode 利用 tree-sitter 解析和 CKG 结构信息,能够:
- 识别接口未实现的方法
- 发现类型断言失败的潜在路径
- 检测泛型约束不匹配
日志分析
使用方式
在 Chat 中直接粘贴日志片段,或使用文件引用:
用户:@logs/app.log 分析最近的错误
分析能力
| 分析类型 | 说明 |
|---|---|
| 错误聚类 | 将相似错误归为同一类,避免重复排查 |
| 时序分析 | 按时间线还原事件发生顺序 |
| 异常模式 | 识别周期性错误、突增错误等模式 |
| 关联分析 | 将日志中的 request ID、trace ID 关联到代码路径 |
支持的日志格式
- 标准文本日志
- JSON 结构化日志(如
slog、zap、logrus输出) - Docker / Kubernetes 容器日志
- 自定义格式(AI 会自动推断格式)
示例
用户:这段日志里有什么异常?
2026-09-14 10:15:01 ERROR [db] connection pool exhausted, waited 30s
2026-09-14 10:15:02 ERROR [http] request timeout: POST /api/users
2026-09-14 10:15:03 WARN [db] slow query: SELECT * FROM users WHERE ... (12.5s)
AI:发现数据库连接池耗尽问题:
1. 慢查询(12.5s)占用连接不释放
2. 连接池等待超时(30s),导致后续请求失败
3. 根因可能是缺少查询索引或 N+1 查询
→ 建议:检查 users 表的索引,优化慢查询
断点建议
智能断点推荐
当你描述一个问题现象时,wescode 会利用 CKG 分析代码结构,推荐最有效的断点位置:
用户:用户登录后 token 有时为空
AI:建议在以下位置设置断点:
1. internal/auth/token.go:45 — GenerateToken 函数入口
2. internal/auth/token.go:62 — JWT 签名前的 claims 组装
3. internal/middleware/auth.go:30 — token 解析和验证
原因:token 为空最可能发生在生成阶段或传递阶段
条件断点
AI 会根据问题特征建议条件断点表达式:
用户:只有特定用户 ID 会触发这个 bug
AI:建议条件断点:
文件:internal/service/user.go:88
条件:user.ID == "problematic-user-id"
堆栈追踪
堆栈解析
将 panic 堆栈粘贴到 Chat,wescode 会:
- 解析堆栈帧:提取文件名、行号、函数名
- 过滤噪音:隐藏标准库和框架的内部调用
- 高亮关键帧:标记属于项目代码的堆栈帧
- 定位根因:结合代码上下文分析崩溃原因
多语言支持
| 语言 | 堆栈格式 |
|---|---|
| Go | goroutine / panic 堆栈 |
| Python | Traceback |
| Java | Exception stack trace |
| JavaScript | Error.stack |
| Rust | backtrace |
示例
用户:
goroutine 1 [running]:
main.processOrder(0xc0001a2000)
/app/internal/order/process.go:45 +0x1a2
main.handleRequest(0xc0001b4000)
/app/internal/handler/order.go:32 +0x8f
AI:堆栈分析:
✗ process.go:45 — processOrder 函数中发生 panic
→ 该行执行 order.Items[0].Price,但 Items 可能为空切片
→ 修复:添加 len(order.Items) == 0 的前置检查
修复方案
自动修复流程
- AI 分析问题后,会生成具体的修复代码
- 修复以 diff 预览 形式展示在编辑器中
- 你可以逐个 Accept 或 Reject 每个修改
- Accept 后文件自动保存,编辑器 buffer 同步
修复质量保障
wescode 的修复方案会经过多重验证:
- QualityGate:自动运行相关测试验证修复正确性
- CSE 约束检查:确保修复不违反项目隐式规约
- 影响分析:通过 CKG 检查修复是否影响其他调用方
修复示例
用户:修复这个空指针问题
AI 生成修复:
文件:internal/order/process.go
- func processOrder(order *Order) error {
- price := order.Items[0].Price
+ func processOrder(order *Order) error {
+ if len(order.Items) == 0 {
+ return fmt.Errorf("order has no items")
+ }
+ price := order.Items[0].Price
验证:go test ./internal/order/... ✓ PASS
调试技巧
高效调试工作流
- 先描述现象,不要直接贴代码——让 AI 先缩小范围
- 提供复现步骤——帮助 AI 理解触发条件
- 使用
@引用相关文件——给 AI 必要的上下文 - 逐步验证——每次修复后运行测试确认
与 CKG 联动
调试时可以利用 CKG 的能力:
- 查看函数的所有调用方:快速了解影响范围
- 查看调用图:理解执行路径
- 查看依赖关系:定位问题传播链
注意事项
- 调试数据(断点、日志分析结果)存储在当前 workspace 的 Cell 中
- 切换 workspace 后调试上下文不会保留
- 敏感日志(含密钥、Token)不会被记忆系统持久化