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中获得类似功能:

  1. 使用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
  1. 手动添加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 ""
  1. 使用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
  1. LLDB内置的Go格式化器(部分支持):
(lldb) type summary add -F go_string "[]uint8"
(lldb) type summary add -F go_slice "[]int"

LLDB对Go的支持仍在发展中,目前主要通过Delve获得完整的Go调试体验。

回到顶部