dlv
是 Delve 的命令行界面,Delve 是一个专门为 Go 语言设计的调试器,它支持调试运行中的 Go 程序,也支持分析 core dump 文件。以下是使用 dlv
调试 Go 程序生成的 core dump 的基本步骤:
1.编译 Go 程序: 编译你的 Go 程序
go build -gcflags="all=-N -l" -o myapp ./myapp
注:
(1)-gcflags="all=-N -l"
禁用了编译器优化和内联
(2)-ldflags="-w
"会禁用调试信息,不要包含该参数
2.运行程序以生成 core dump: 在程序崩溃之前,确保你的操作系统配置为允许生成 core dump。这通常可以通过 ulimit
命令来实现:
ulimit -c unlimited
export GOTRACEBACK=crash
运行你的程序并使其崩溃,从而生成 core dump。
3.使用 Delve 调试 core dump: 使用 dlv core
命令来启动 Delve 并加载你的程序和 core dump 文件:
dlv core ./myapp /path/to/coredump
这里 ./myapp
是编译后的可执行文件,/path/to/coredump
是生成的 core dump 文件的路径。
4.分析程序状态: 一旦 Delve 启动并加载了 core dump,你可以使用 Delve 提供的各种命令来分析程序状态。常见的调试命令包括:
-
bt
或backtrace
:显示当前 goroutine 的调用堆栈。 -
frame <n>
:选择堆栈上的第n
个帧。 -
list
:显示当前断点处的源代码。 -
locals
:显示当前函数的局部变量。 -
print <expr>
:评估并打印表达式。 -
goroutines
:列出所有 goroutines。
5.退出 Delve: 当你完成调试并分析了 core dump 后,你可以通过输入 exit
或者按下 Ctrl+D
来退出 Delve。