需要调试器
任何编程语言中最简单的调试形式是使用打印语句/日志并写入标准输出。这肯定可以工作,但是当我们的应用程序规模增加并且逻辑变得更加复杂时,它变得极其困难。将打印语句添加到应用程序的每个代码路径都不容易。这是调试器派上用场的地方。调试器可帮助我们使用断点和许多其他功能来跟踪程序的执行路径。Delve是Go的一种此类调试器。使用Delve调试Go应用程序。
安装Delve
请确保您位于一个不包含go.mod文件的目录中。
cd ~/Documents/
接下来,设置GOBIN环境变量。此环境变量指定Delve二进制文件的安装位置。如果GOBIN已经设置,请跳过此步骤。您可以GOBIN通过运行以下命令检查是否设置了。
go env | grep GOBIN
如果以上命令显示GOBIN="",则表示GOBIN未设置。请运行export GOBIN=~/go/bin/命令设置GOBIN。
让通过运行添加GOBIN到PATHexport PATH=$PATH:~/go/bin
对于macOS,需要Xcode命令行开发人员工具来运行Delve。请运行xcode-select --install以安装命令行工具。Linux用户可以跳过此步骤。
现在我们开始安装Delve。请跑
go get github.com/go-delve/delve/cmd/dlv
安装delve。运行此命令后,请通过运行来测试安装dlv version。成功安装后,它将打印Delve的版本。
Delve Debugger
Version: 1.4.0
Build: $Id: 67422e6f7148fa1efa0eac1423ab5594b223d93b
开始Delve
编写一个简单的程序,然后使用Delve开始对其进行调试。
使用以下命令为示例程序创建目录。
mkdir ~/Documents/debugsample
main.go在debugsample我们刚刚创建的目录内创建一个文件,内容如下。
上面的程序将打印切片 的最大元素arr。运行上面的程序将输出,
Max element is 188
可以调试程序了。让我们转到debugsample目录cd ~/Documents/debugsample。之后,键入以下命令以启动Delve。
dlv debug
上面的命令将开始调试当前目录中的main 软件包。键入上面的命令后,您可以看到终端已更改为(dlv)提示。如果您看到此更改,则表明调试器已成功启动并等待我们的命令:)。
让我们启动第一个命令。
在dlv提示符下,键入continue。
(dlv) continue
该continue命令将运行程序,直到出现断点或程序完成为止。由于我们没有定义任何断点,因此程序将一直运行到完成。
Max element is 188
Process 1733 has exited with status 0
如果看到上面的输出,则调试器已运行,程序已完成:)。但这对我们没有任何用处。让我们继续,添加几个断点,并观察调试器如何发挥作用。
创建断点
断点在指定的行处暂停程序的执行。当执行暂停时,我们可以将命令发送到调试器以打印变量的值,查看程序的堆栈跟踪,等等。
下面提供了创建断点的语法,
(dlv) break filename:lineno
上面的命令将lineno在文件的line处创建一个断点filename。
让我们在行号上添加一