# Visual Studio Code 配置delve断点调试

## 0.dlv & dap

Delve 是一个 Go 语言的调试器，由 Sam Boyer 和 Brian Powers 开发，并且是 Go 社区广泛使用的调试工具之一。它提供了一套丰富的调试功能，专门针对 Go 语言的特性设计，使得开发者可以更加高效地进行程序调试。默认在bin目录下。

DAP（Debug Adapter Protocol）是一个标准化的 JSON-RPC 协议，用于定义调试器和开发环境之间的通信，支持跨语言和跨平台的调试功能。 [https://microsoft.github.io/debug-adapter-protocol/overview](https://microsoft.github.io/debug-adapter-protocol/overview)

## 1\. Visual Studio Code 配置

当在Visual Studio Code中安装go官方tools后，默认会使用dlv作为debugger，dap作为protocol进行本机调试

Visual Studio Code中根据launch.json中的配置信息进行debug 一个常见的配置信息如下

```json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Package",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "cmd/xxx/."
        }
    ]
}
```

* version: Visual Studio Code 配置文件的具体版本
    
* configurations：一个数组，可以通过json形式添加不同的config
    
* type: 指定了调试会话使用的调试器类型。在这里，"go" 表示使用 Go 语言的调试器。
    
* request: 定义了调试会话的请求类型。"launch" 表示启动一个新的程序进行调试。
    
* mode: "auto",：指定了调试模式。"auto" 模式意味着调试器将自动选择是直接启动程序还是附加到已运行的程序上。
    
* "program": "cmd/healthcare/."：定义了要启动和调试的程序的路径。这里 `"cmd/healthcare/."` 指的是项目中 `cmd/healthcare` 目录下的主程序入口文件。 详细配置字段以及流程： [https://code.visualstudio.com/docs/editor/debugging](https://code.visualstudio.com/docs/editor/debugging)
    

## 2.注意事项

go的包管理机制： [https://go.dev/blog/using-go-modules](https://go.dev/blog/using-go-modules)

Q: go run main.go的时候，go编译器会尝试自动编译和链接引入的import包，当使用wire时，wire会生成wire\_gen.go ，如果在kratos框架中就会自动生成在 main包下，且wireApp为包可见级别。此时go run main.go会提示wireApp is undefined , 可能是go build 的时候，只build main.go 并没有寻找到wire生成的gen.go ， main.go 中也没有显式的import(存疑)，导致buid的过程中没有链接到wireApp S: 解决方法：build整个cmd项目目录下main package的所有go文件 go build .

同理，在Visual Studio Code配置 "program": "cmd/xxx/." 的时候，需要指定main package 所在的平级目录文件夹。不可cmd/xxx/main.go
