vscode delve调试器感到困惑

时间:2018-06-28 13:31:37

标签: go visual-studio-code delve

我已经搜索了所有地方,并尝试了一切,但是用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”来调试可执行文件。

1 个答案:

答案 0 :(得分:4)

  

Delve使您可以通过控制   执行流程,评估变量并提供   线程/ goroutine状态,CPU寄存器状态等信息。

Delve将在当前目录中编译“ main”包,然后开始对其进行调试。

您的问题:-

  

如果我单步执行代码,调试器似乎会在整个过程中跳转   有时就像在切换线程一样放置

假设您的代码中发生错误并且代码出现紧急情况,那么VSCode将使您在调试代码时跳转至其核心文件中定义的紧急情况定义。

第二个问题:-

  

大多数时候,如果我将鼠标悬停在变量上,则什么也没有发生。如果我尝试   将它们添加为手表,我只是“不可用”。

Vs代码只能为您提供在同一程序包中定义的那些函数的定义,因此,如果在另一个程序包中定义了这些函数,则必须导入该程序包,否则它将向您显示unavailable函数定义。因此,请检查悬停显示unavailable的位置是否正确。

有关更多信息,请查看Delve Debugger的用法文档

已编辑:即使在使用F10时跳转,也要在跳转的代码后创建断点,并使用F12跳转到下一个断点,这样就不会跳转到核心函数定义。