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) 搜索调试符号,所以只能手动加载。
完成加载之后就能正常下断点调试了。