调试

核心功能

通过$dbg语句在代码中设置断点,启动原生调试器:

fn main() {
    a := 1
    $dbg  // 断点位置
    for i in 0..4 {
        $dbg  // 循环断点
    }
}

调试流程

v run debug_example.v  # 启动调试
# 到达断点时进入交互环境
Break on [main] main in debug_example.v:3
debug_example.v:3 vdbg>

调试命令集

命令

功能

示例

c, continue

继续执行

vdbg> c

bt

显示调用栈

vdbg> bt

l, list [行数]

查看源码

vdbg> l 5

scope

显示当前作用域变量

vdbg> scope → 输出变量表

p <变量名>

打印变量值

vdbg> p aa = 1 (int)

w <变量名>

监视变量变化

vdbg> w i

u <变量名>

取消监视

vdbg> u i

mem, memory

显示内存使用

vdbg> mem → 输出内存统计

heap

显示堆内存

vdbg> heap

mod

显示当前模块

vdbg> mmain

q, quit

退出调试

vdbg> q

典型调试场景

  1. 监视循环变量
vdbg> w i      # 监视变量i
i = 0 (int)
vdbg> c        # 继续执行
Break... i = 1 # 自动显示变化值
vdbg> [回车]     # 重复上条命令(c)
Break... i = 2
  1. 源码上下文查看
vdbg> l       # 查看当前断点附近源码
0001  fn main() {
0002      a := 1
0003>     $dbg
0004      for ...
  1. 上下文类型检查
vdbg> anon?    # 检查当前是否匿名函数
false
vdbg> method?  # 检查当前是否方法
false
vdbg> generic? # 检查当前是否泛型
false
  1. 内存分析
vdbg> mem     # 总内存使用
Total allocated: 2.5MB
vdbg> heap    # 堆内存详情
Allocations: 142
Free memory: 1.2MB

调试器特性

  1. 命令自动补全(Windows除外)
  2. 回车键重复上条命令
  3. 变量类型自动显示
  4. 监视变量跨断点持续生效

⚠️ 注意:调试会话中修改的变量值在继续执行后将恢复实际值