我已经搜索了所有地方,并尝试了一切,但是用VSCODE调试go exe对我来说真的很奇怪。
如果我单步执行代码,调试器似乎有时会在各处跳跃,就像我在切换线程一样。在大多数情况下,如果我将鼠标悬停在变量上,则不会发生任何事情。如果我尝试将它们添加为手表,则只会显示“不可用”。我正在IDE中构建和运行。
我拥有go and delve的最新版本。我看到我应该通过一些gcflags设置来避免编译器优化,但是什么也没做。不知道如何取得进展。有任何线索吗?
更新:毕竟,这只是VSCODE使用的构建任务中的错字。问题确实是编译器优化,需要使用以下确切语法来禁用它:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Make Prog",
"type": "shell",
"command": "go",
"args": [
"install",
"-gcflags",
"-N -l",
"./..."
],
"group": {
"kind": "build",
"isDefault": true
},
}
]
}
同样重要的是,我正在使用“ exec”而不是“ debug”来调试可执行文件。
答案 0 :(得分:4)
Delve使您可以通过控制 执行流程,评估变量并提供 线程/ goroutine状态,CPU寄存器状态等信息。
Delve将在当前目录中编译“ main”包,然后开始对其进行调试。
您的问题:-
如果我单步执行代码,调试器似乎会在整个过程中跳转 有时就像在切换线程一样放置
假设您的代码中发生错误并且代码出现紧急情况,那么VSCode将使您在调试代码时跳转至其核心文件中定义的紧急情况定义。
第二个问题:-
大多数时候,如果我将鼠标悬停在变量上,则什么也没有发生。如果我尝试 将它们添加为手表,我只是“不可用”。
Vs代码只能为您提供在同一程序包中定义的那些函数的定义,因此,如果在另一个程序包中定义了这些函数,则必须导入该程序包,否则它将向您显示unavailable
函数定义。因此,请检查悬停显示unavailable
的位置是否正确。
有关更多信息,请查看Delve Debugger的用法文档
已编辑:即使在使用F10
时跳转,也要在跳转的代码后创建断点,并使用F12
跳转到下一个断点,这样就不会跳转到核心函数定义。