您好,欢迎访问一九零五行业门户网

golang linux 如何调试

go语言作为一种为了更方便、更快速地进行开发而被出版的高级程序设计语言,不仅可以运行在windows,macos和linux等多个操作系统上,同时还提供了强大的调试工具帮助开发者解决问题。本篇文章将会介绍如何在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 updatesudo 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" >> ~/.bashrcsource ~/.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 envgo build -gcflags "-n -l" -o debug-demo -tags netgo -ldflags '-w -extldflags "-static"' -v main.go
设置断点
在程序中设置断点是调试过程中最为常用的操作。我们可以在代码的任意位置设置断点,以等待程序执行到该处位置时停止。
使用dlv可以通过以下两种方式设置断点:
图形界面(推荐)使用dlv的图形界面可以更加直观地对程序进行操作和修改。执行以下命令,接着会自动开启图形界面:
dlv debug ./debug-demo
命令行执行以下命令进入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系统上使用dlv对go程序进行调试。首先,我们安装了go语言和dlv调试器,然后使用go build编译程序并在程序中设置了断点,使用dlv的图形化界面或命令行控制程序运行,并查看和修改变量的值,以解决go程序调试中遇到的问题。希望通过本文,读者可以掌握在linux系统下使用dlv调试go程序的基本技能。
以上就是golang linux 如何调试的详细内容。
其它类似信息

推荐信息