Golang调试工具Delve在WSL2环境下运行卡顿问题

Golang调试工具Delve在WSL2环境下运行卡顿问题 Go 调试器在 Linux 的 Windows 子系统(WSL2)上使用时似乎存在一个重大问题。过去两年左右,这个问题已在不同论坛中被多次提及,但似乎仍然存在。

请参阅我在此处描述该问题的帖子:

https://stackoverflow.com/questions/72202939/go-delve-debugger-just-hangs-when-debugging-wsl2-target-from-within-goland

https://youtrack.jetbrains.com/issue/GO-10050

1 回复

更多关于Golang调试工具Delve在WSL2环境下运行卡顿问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在WSL2环境下使用Delve进行Go调试时确实会遇到卡顿问题,这主要是由于WSL2的跨文件系统性能问题导致的。以下是具体的解决方案和示例代码:

1. 将项目文件存储在WSL2文件系统中 将Go项目文件从Windows文件系统(如/mnt/c/)移动到WSL2的Linux原生文件系统(如/home/username/projects/):

# 在WSL2中创建项目目录
mkdir -p ~/projects/myapp
cd ~/projects/myapp

# 初始化Go模块
go mod init myapp

2. 配置GoLand使用WSL2内的Delve 在GoLand中设置使用WSL2内部的Go工具链:

// main.go - 测试用示例代码
package main

import (
    "fmt"
    "time"
)

func main() {
    for i := 1; i <= 5; i++ {
        fmt.Printf("Iteration %d\n", i)
        time.Sleep(1 * time.Second)
    }
}

3. 使用命令行Delve调试 直接在WSL2终端中使用Delve进行调试:

# 安装Delve
go install github.com/go-delve/delve/cmd/dlv@latest

# 编译并调试
cd ~/projects/myapp
dlv debug main.go

# 在Delve交互界面中设置断点
(dlv) break main.main
(dlv) continue

4. 配置launch.json(VSCode用户) 对于VSCode用户,配置.vscode/launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug in WSL2",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}",
            "cwd": "/home/username/projects/myapp",
            "env": {},
            "args": [],
            "showLog": true,
            "trace": "verbose"
        }
    ]
}

5. 使用Delve的headless模式 通过headless模式在WSL2中启动调试服务器:

# 在WSL2中启动调试服务器
dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient main.go

# 在IDE中连接到localhost:2345进行调试

6. 性能优化配置~/.dlv/config.yml中添加WSL2优化配置:

max-string-len: 512
max-array-values: 64
max-variable-recurse: 1
disable-aslr: true
check-go-version: false

这些配置能显著改善WSL2环境下Delve的调试性能。关键是将项目文件完全放在WSL2的Linux文件系统中,避免跨Windows-WSL2文件系统的性能瓶颈。

回到顶部