使用VS Code调试Go程序
前期准备
在vs code中的扩展程序中搜索并安装Go扩展程序,注意作者是golang
打开vs code的命令面板,输入"Go: Install/Update Tools",并单击该命令执行,安装或更新Go语言的工具
源代码
package main
func main() {
a, b := 10, 12
sum := add(a, b)
println(sum)
}
func add(a, b int) int {
return a + b
}
启动调试
在源码文件想要调试的行号左边单击,会出现一个小红点,这个是断点(breakpoint)
按F5或者调试菜单单击运行即可启动调试,程序执行到断点处会停止运行,等待接下来的指令。
-
进入调试模式后,vs code在源码文件上面会出现6个调试按钮,
点击播放图标可以让程序运行到下一个断点,如果没有断点了,程序就会一直运行直到程序结束。
点击转弯箭头,可以跳到下一条代码,如果是函数调用直接执行完函数后跳到下一条语句后停止。
点击向下箭头,可以跳到下一条语句,如果遇到函数调用,则直接跳到函数的第一条语句并停止
点击向上箭头,可以跳出本函数
点击刷新按钮,可以重新进入调试模式
点击停止按钮,直接停止调试,退出程序
高级调试技巧
利用vs code的调试面板
vs code的调试面板可以查看局部变量、Watch监听表达式、查看CALL STACK(调用栈)、管理所有断点等。
在CALL STACK面板可以查看所有线程以及每个线程的调用栈,右击调用栈在快捷菜单中点击"Open Disassembly View"可以打开反汇编界面,在这里可以单步调试反汇编代码。
利用调试控制台(DEBUG CONSOLE) 查看更多信息
-
查看变量名或者函数名
a > 10 add > main.add
-
查看CPU寄存器的值,需要使用对应架构下的寄存器名称,如32位x86使用EAX、EBX等
RAX > 22 = 0x16 RBX > 12 = 0xc
-
查看当前栈顶的地址
RSP > 824634107712 = 0xc00005e740
-
查看当前栈顶往高地址方向偏移8个字节的地址处的值
*(*int)(RSP+0x8) > 12
-
查看当前goroutine
runtime.curg
以上debug命令都可以直接在Watch面板中添加监听,方便实时查看表达式的值