LLDB 18/19 调试 zig 代码

作于: 2025 年 2 月 12 日,预计阅读时间 2 分钟

zig 官方推荐用 CodeLLDB 插件调试,实测断点不认,试了 CodeLLDB 和 LLDB-DAP 都不行。

放弃折腾了,还是命令行手动调试拉倒。

PS> $Env:LLDB_USE_NATIVE_PDB_READER="1"
PS> lldb.exe zig-out/bin/starlight.exe

(lldb) target create ".\\zig-out\\bin\\starlight.exe"
current executable set to 'D:\projects\starlight\zig-out\bin\starlight.exe' (x86_64).
(lldb) target symbols add zig-out/bin/starlight.pdb
symbol file 'D:\projects\starlight\zig-out\bin\starlight.pdb' has been added to 'D:\projects\starlight\zig-out\bin\starlight.exe'
(lldb) b main
Breakpoint 1: 2 locations.
(lldb) r
(lldb) Process 29452 launched: 'D:\projects\starlight\zig-out\bin\starlight.exe' (x86_64)
Process 29452 stopped
* thread #1, stop reason = breakpoint 1.2
    frame #0: 0x00000000004d1786 starlight.exe`main(c_argc=1, c_argv=0x000001b88f8e6c30, c_envp=0x000001b88f8f8b10) at start.zig:486
   483  }
   484
   485  fn main(c_argc: c_int, c_argv: [*][*:0]c_char, c_envp: [*:null]?[*:0]c_char) callconv(.C) c_int {
-> 486      var env_count: usize = 0;
   487      while (c_envp[env_count] != null) : (env_count += 1) {}
   488      const envp = @as([*][*:0]u8, @ptrCast(c_envp))[0..env_count];
   489
(lldb)

lldb 调试主要遇到的问题是无法加载 pdb 符号,搜索发现 lldb 不会从模块路径(比如 zig-out/bin/starlight.exe|pdb) 搜索调试符号,所以只能手动加载。

完成加载之后就能正常下断点调试了。


/zig/ /lldb/