golang调试
引言:和PHP一样,虽然通过print的方式可以解决调试一部分代码,解决一些问题,但是总体效率并不高,而且有时候光看输入输出没办法排除一些代码逻辑问题,所以和所有强类型语言类型一样,所以通过断点,逐步调试还是很有必要的。在golang中调试需要借助调试组件delve
1、安装delve
go get -u github.com/derekparker/delve/cmd/dlv2、使用dlv命令调试golang
a、我们写个test.go,代码如下:
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Mahesh", "Kumar")
fmt.Println(a, b)
}b、开始调试,在工程目录执行:
dlv debug test.go进入调试模式后,输入h或help可以看到dlv所有的调试命令,建议多多看看,理解了在开始调试,不然会无从下手,不懂的话,在调试过程中,也可以随时输入命令调出帮助命令。
c、添加一个断点,dlv可以设定断点在函数开始,如在main函数开头设定断点
(dlv) b main.main
Breakpoint 1 set at 0x10b7148 for main.main() ./test.go:8在代码某一行设定断点,b 行号
(dlv) b 6
Breakpoint 2 set at 0x10b7100 for main.swap() ./test.go:6d、输入c,开始执行
(dlv) c
> main.main() ./test.go:8 (hits goroutine(1):1 total:1) (PC: 0x10b7148)
3: import "fmt"
4:
5: func swap(x, y string) (string, string) {
6: return y, x
7: }
=> 8: func main() {
9: a, b := swap("Mahesh", "Kumar")
10: fmt.Println(a, b)
11: }e、n 命令,单步执行
(dlv) n
> main.main() ./test.go:9 (PC: 0x10b715f)
4:
5: func swap(x, y string) (string, string) {
6: return y, x
7: }
8: func main() {
=> 9: a, b := swap("Mahesh", "Kumar")
10: fmt.Println(a, b)
11: }f、常用命令
输入 n 回车,执行到下一行
输入 s 回车,单步执行
输入 c 回车,一直执行直到断点或者程序结束
输入 print(别名p)输出变量信息
输入 args 打印出所有的方法参数信息
输入 locals 打印所有的本地变量使用dlv命令行调试还是比较方便的,如果有过gdb调试经验的话,用起来应该是很顺手的。
3、使用IDE调试golang,以visual studio code为例
使用IDE之前也需要手动安装dlv,本质也是借助dlv进行调的
a、安装go扩展:vscode -> 查看 -> 扩展
b、配置启动项:vscode -> 查看 -> 调试, 添加配置项,举例如下
{
"version": "0.2.0",
"configurations": [
{
"name": "snow",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceRoot}/main.go", //启动文件或启动文件所在目录,默认是main.go
"env": {
"GO111MODULE":"on"
},
"args": [],
"trace": "log",
"showLog": true
}
]
}c、按 F5 启动调试,调试快捷键和Vistual Studio,调试界面非常友好,常用快捷键如下
F9 切换断点
F10 单步执行
F11 进入函数内部
Shift+F11 退出当前函数开始执行后,在左侧面板可以看到当前local和global变量值,IDE调试非常方便
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭