AI 辅助调试

wescode 内置智能调试助手,能够分析错误信息、追踪问题根因、提供修复方案,大幅缩短排查时间。

功能概览

能力说明
错误诊断自动分析编译错误、运行时异常、类型错误
日志分析从日志中提取关键信息,定位异常模式
断点建议根据代码结构推荐最佳调试断点位置
堆栈追踪解析堆栈信息,定位问题源头
修复方案生成可直接应用的修复代码

错误诊断

编译错误修复

当项目出现编译错误时,wescode 会自动分析错误信息并给出修复建议:

  1. 打开终端面板,运行构建命令(如 go build ./...)
  2. 编译错误会自动被 wescode 捕获
  3. 在 Chat 面板中输入 /fix 或描述错误现象
  4. AI 会分析错误上下文,给出精准修复
用户:build 失败了,提示 undefined: UserService
AI:分析错误上下文后发现:
  1. UserService 定义在 internal/service/user.go
  2. 当前文件缺少 import "project/internal/service"
  → 已自动添加 import 语句

运行时异常

对于运行时 panic、空指针、越界等异常:

类型错误诊断

wescode 利用 tree-sitter 解析和 CKG 结构信息,能够:


日志分析

使用方式

在 Chat 中直接粘贴日志片段,或使用文件引用:

用户:@logs/app.log 分析最近的错误

分析能力

分析类型说明
错误聚类将相似错误归为同一类,避免重复排查
时序分析按时间线还原事件发生顺序
异常模式识别周期性错误、突增错误等模式
关联分析将日志中的 request ID、trace ID 关联到代码路径

支持的日志格式

示例

用户:这段日志里有什么异常?

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 会:

  1. 解析堆栈帧:提取文件名、行号、函数名
  2. 过滤噪音:隐藏标准库和框架的内部调用
  3. 高亮关键帧:标记属于项目代码的堆栈帧
  4. 定位根因:结合代码上下文分析崩溃原因

多语言支持

语言堆栈格式
Gogoroutine / panic 堆栈
PythonTraceback
JavaException stack trace
JavaScriptError.stack
Rustbacktrace

示例

用户:
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 的前置检查

修复方案

自动修复流程

  1. AI 分析问题后,会生成具体的修复代码
  2. 修复以 diff 预览 形式展示在编辑器中
  3. 你可以逐个 Accept 或 Reject 每个修改
  4. Accept 后文件自动保存,编辑器 buffer 同步

修复质量保障

wescode 的修复方案会经过多重验证:

修复示例

用户:修复这个空指针问题

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

调试技巧

高效调试工作流

  1. 先描述现象,不要直接贴代码——让 AI 先缩小范围
  2. 提供复现步骤——帮助 AI 理解触发条件
  3. 使用 @ 引用相关文件——给 AI 必要的上下文
  4. 逐步验证——每次修复后运行测试确认

与 CKG 联动

调试时可以利用 CKG 的能力:

注意事项