温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Linux系统上怎么进行Go语言程序调试

发布时间:2023-05-16 15:25:51 来源:亿速云 阅读:154 作者:iii 栏目:编程语言

这篇文章主要讲解了“Linux系统上怎么进行Go语言程序调试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统上怎么进行Go语言程序调试”吧!

调试工具

Go语言提供了内置的调试器——go debug,但是Go的高效特性也带来了许多调试挑战。Dlv(https://github.com/go-delve/delve)是一个 Go 语言的现代调试器,能够支持 Go 特定的调试功能。Dlv 提供了单步跟踪、查看变量、修改变量和断点等常用的调试功能。另外,GDB也支持Go语言的调试,但是它不能理解Go语言的调度器,因此更适合开发内核或只需要使用少量Go特定功能的程序调试。

安装Dlv

Dlv是用Go语言编写的,因此安装它需要先安装Go语言本身。可以从官方网站(https://golang.org/dl/)下载最新版本的Go语言安装包,并将其配置到环境变量中。

安装完成Go语言后,我们需要先安装Dlv依赖的库——dynamically linked Linux utilities:

sudo apt-get update
sudo apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`

接着执行以下命令安装Dlv:

go get -u github.com/go-delve/delve/cmd/dlv

以上命令将Dlv安装到$GOPATH/bin目录中,可以手动将其添加到PATH变量,也可以通过以下命令将其添加到PATH中:

echo "export PATH=$PATH:$(go env GOPATH)/bin" >> ~/.bashrc
source ~/.bashrc

编译调试程序

我们需要进入程序所在的目录,使用go build编译程序并生成二进制文件。假设我们的程序名为debug-demo,我们可以通过以下命令进行编译:

go build -gcflags "-N -l" -o debug-demo
  • -gcflags "-N -l":添加编译标识以确保编译器不会优化代码,从而方便调试。

  • -o debug-demo:将生成的可执行文件命名为debug-demo。

为了解决源码被汇编的问题,我们还可以使用go env命令获取CGO_ENABLED的值,并将它设置为0,然后再次进行编译:

go env
go build -gcflags "-N -l" -o debug-demo -tags netgo -ldflags '-w -extldflags "-static"' -v main.go

设置断点

在程序中设置断点是调试过程中最为常用的操作。我们可以在代码的任意位置设置断点,以等待程序执行到该处位置时停止。

使用Dlv可以通过以下两种方式设置断点:

  1. 图形界面(推荐)

使用Dlv的图形界面可以更加直观地对程序进行操作和修改。执行以下命令,接着会自动开启图形界面:

dlv debug ./debug-demo
  1. 命令行

执行以下命令进入Dlv命令行模式:

dlv debug ./debug-demo --headless --listen=:2345 --api-version=2

进入Dlv后,我们可以使用break(或缩写为b)命令设置断点:

(b)reak {<location>|<function>|<filename>:<line>|<remote package path>}: 设置断点
(b)reakpoints: 显示当前所有的断点
(d)elete {<breakpoint#>|<breakpoint.id>}: 删除断点#或通过Breakpoint.id删除指定断点
(c)ontinue: 从当前位置继续执行程序,直到下一个断点或程序完结

例如,我们可以在程序的第10行设置断点:

(b)reak main.go:10

控制程序运行

在程序运行过程中,可以使用step(或缩写为s)和next(或缩写为n)命令控制程序运行:

(s)tep: 单步调试,如果当前位置是函数,则进入该函数内部
(n)ext: 单步调试,如果当前位置是函数,则不进入该函数内部

查看变量

Dlv也提供了显示变量的命令,使用print(或缩写为p)命令可以查看当前作用域中的变量:

(p)rint <variable>: 显示变量

例如,我们可以使用以下命令查看变量a和变量b:

(p)rint a
(p)rint b

修改变量

除了查看变量外,Dlv还支持修改变量的值,使用set命令修改变量的值:

(s)et <variable> = <value>: 修改变量的值

例如,我们可以使用以下命令将变量a的值修改为100:

(s)et a = 100

感谢各位的阅读,以上就是“Linux系统上怎么进行Go语言程序调试”的内容了,经过本文的学习后,相信大家对Linux系统上怎么进行Go语言程序调试这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI