day4:vscode软件debug调试(go语言) | 青训营

277 阅读2分钟

背景:在理解goroutine及channel(通道)知识过程中,想要通过debug逐步分析程序执行过程,以下分享在vscode中配置debug过程及通道执行过程解析。

1. 在VSCode里面下载安装golang的插件

image.png

2. 配置golang辅助工具

使用快捷键:Ctrl+Shift+P 输入Go:Install/Update Tools

image.png

选择全都要

image.png 一开始可能会安装失败,如下图 image.png 这是因为go的支持挂在国外,我们可以用go的代理,进行如下操作

2.1配置go代理的环境变量

进入goproxy.io网站

image.png

里面有个Windows和Linux两种环境,根据自己实际环境配置,如下为windows配置演示:

image.png

image.png 环境变量配置完成后,打开cmd执行go env,配置的环境变量已经生效。

image.png

接下来重启VSCode,Ctrl+Shift+P 输入Go:Install/Update Tools,安装(重复上述 2. 步骤)

image.png 安装成功

3.创建模块

image.png

点击左侧debug

image.png

点击显示所有自动调试配置,添加配置

image.png

选中 GO:Launch file

image.png

"program": "${file}"表示执行项目位置为当前打开文件位置

image.png

设置断点,点击main 按F5,左侧出现变量信息,即可调试

image.png

4.在程序执行过程中,通道作用解析。

4.1设置三处断点(开启goroutine处及通道位置),按F5执行debug

image.png

可以看到,当前执行位置为橙色框框位置,逐过程执行

image.png image.png image.png

两个goroutine先执行,执行到需要从c中读取x,y值时,停止执行,等待sum函数中c值的传递。 观察以下图左侧值部分,此时x=17,继续执行,y=-5,从通道取值完成后,main程序才继续执行下一行。

image.png image.png

为了验证由于goroutine并发执行,我又执行了几次程序,发现每次执行x,y的值可能不一样,如下图左侧位置 image.png

总结:

  1. 在执行make(chan int) 创建无缓冲区通道后,接受方也会阻塞直到发送方往通道中发送了值。
  2. go是并发的,不同线程传递值的顺序会有不同。