Golang调试工具 - Runtime-gdb.py在LLDB中的使用
Golang调试工具 - Runtime-gdb.py在LLDB中的使用 是否存在适用于 LLDB 而非 GDB 的 runtime-gdb.py 版本?我希望在 LLDB 中调试 Go 程序时,能获得与使用该脚本为 GDB 提供的相同类型的功能。
1 回复
更多关于Golang调试工具 - Runtime-gdb.py在LLDB中的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
目前没有官方维护的适用于LLDB的runtime-gdb.py等效版本。不过,可以通过以下方式在LLDB中获得类似功能:
- 使用Go内置的LLDB支持:
# 编译时添加调试信息
go build -gcflags="all=-N -l" main.go
# 在LLDB中加载
lldb ./main
(lldb) target create "./main"
(lldb) settings set target.exec-search-paths /usr/local/go/pkg
- 手动添加Go运行时类型支持:
# 在LLDB中加载自定义Python脚本
(lldb) command script import ~/go_runtime.py
# go_runtime.py示例片段
def go_string(valobj, internal_dict):
length = valobj.GetChildMemberWithName("len").GetValueAsUnsigned(0)
data_ptr = valobj.GetChildMemberWithName("str").GetChildMemberWithName("Data")
if length > 0 and data_ptr.IsValid():
error = lldb.SBError()
string_data = data_ptr.GetPointeeData(0, length).GetString(error, 0)
if error.Success():
return '"%s"' % string_data
return ""
- 使用Delve作为替代方案:
# 安装Delve
go install github.com/go-delve/delve/cmd/dlv@latest
# 调试Go程序
dlv debug main.go
(dlv) break main.main
(dlv) continue
(dlv) print variable
- LLDB内置的Go格式化器(部分支持):
(lldb) type summary add -F go_string "[]uint8"
(lldb) type summary add -F go_slice "[]int"
LLDB对Go的支持仍在发展中,目前主要通过Delve获得完整的Go调试体验。

