golang调试
引言:和PHP一样,虽然通过print
的方式可以解决调试一部分代码,解决一些问题,但是总体效率并不高,而且有时候光看输入输出没办法排除一些代码逻辑问题,所以和所有强类型语言类型一样,所以通过断点,逐步调试还是很有必要的。
在golang
中调试需要借助调试组件delve
1、安装delve
go get -u github.com/derekparker/delve/cmd/dlv
2、使用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:6
d、输入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 国际许可协议 进行许可。
评论已关闭