记录 VS2022 调试 WSL2 踩过的坑

记录 VS2022 调试 WSL2 踩过的坑

背景

想用 VS2022 整个小工具用于 WSL2 中,本想SSH连接,看官方文档发现可以直接调试,按文档一步步来并不能用,踩了一个个坑,一边搜一边试,终于成功调试了,趁热记录一下这个艰辛的过程。

本地配置

Windows 10 专业版 22H2 19045.4412

Microsoft Visual Studio Community 2022 (64位) 17.9.5

WSL2 : Ubuntu-24.04

vsdbg 17.11.10506.2

实现过程

必备条件

  • Windows 中:已安装 vs2022、WSL、WSL 组件
  • WSL 中:已安装 dotnet SDK

条件及主要步骤,可按官方文档进行,但官方文档所述不够详细,而且过程中有几处未提到的问题。

下载vsdbg-linux-x64.tar.gz

vs2022 会自动下载,但是没梯子实在太慢。解决方案如下:

在 wsl 中:

新建一个文件夹,然后新建一个 console project

> mkdir ~/demo && cd ~/demo
> dotnet new console

在 Windows 中:

打开以下路径 文件资源管理器-> Linux -> Ubuntu-24.04 -> [~/demo ]

用 vs2022 打开 “demo.csproj”

至此,vs2022 将自动下载 vsdbg-linux-x64.tar.gz 。下面将采用迂回的办法安装这东西。

回到 wls 中:

> ps -aux

找到正在下载的网址,记住这个 wget 进程的 pid,同时把这个网址复制下来,用下载工具下载,我用的迅雷,很快就下好了。我下载后保存的位置是 D:\downloads

在如下网址下载 GetVsDbg.sh 脚本,我保存到 ~/downloads

> curl -sSL https://aka.ms/getvsdbgsh -o ~/downloads/getvsdbg.sh
> vim ~/downloads/getvsdbg.sh


# 在这个文件中找到 download() 函数,把如下内容注释掉,之后是这样子的。目的是让脚本运行时不要去下载。
download()
{
    if [ "$__UseZip" = false ]; then
        vsdbgFileExtension=".tar.gz"
    else
        echo "Warning: Version '${__VsDbgMetaVersion}' is only avaliable in zip."
        vsdbgFileExtension=".zip"
    fi
    vsdbgCompressedFile="vsdbg-${__RuntimeID}${vsdbgFileExtension}"
#    target="$(echo "${__VsDbgVersion}" | tr '.' '-')"
#    url="https://vsdebugger.azureedge.net/vsdbg-${target}/${vsdbgCompressedFile}"
#
#    check_internet_connection "$url"
#
#    echo "Downloading ${url}"
#    if hash wget 2>/dev/null; then
#        wget -q "$url" -O "$vsdbgCompressedFile"
#    elif hash curl 2>/dev/null; then
#        curl -s "$url" -o "$vsdbgCompressedFile"
#    fi
#
#    if [ $? -ne  0 ]; then
#        echo
#        echo "ERROR: Could not download ${url}"
#        exit 1;
#    fi
#
    __VsdbgCompressedFile=$vsdbgCompressedFile
}

同时也要找到一个 UpdateDebugger.sh, 需要用到这个文件的路径,类似 /mnt/c/Porgram Files/Microsoft Visual Studio/…,是 Windows 中 vs2022 的安装路径,复制下来后边再用。

接下来,需要先把这个 wget 进程 kill 掉,假如 pid 是 20234。此时 ~/ 目录下会有一个名为 vsdbg 的文件夹,这个文件夹中有个名为 vsdbg-linux-x64.tar.gz 的文件,是刚刚 wget 下载未完成的文件,需要用已经下载好的替换掉。

> kill -9 20234
> rm -rf ~/vsdbg/*
> cp /mnt/d/downloads/vsdbg-linux-x64.tar.gz ~/vsdbg/

回到 Windows 中,需要修改 vs2022 的脚本,按上边找到的 vs2022 安装路径中的 UpdateDebugger.sh 文件,把文件中的 curl 和 cat 这两行注释掉,新增如下命令后保存。

cat $HOME/downloads/getvsdbg.sh | /bin/sh /dev/stdin -v lasted -l $HOME/vsdbg;

至此处,vsdbg 已经安装完成。

准备调试

需要修改 wsl 调试配置,否则无法正常调试,会跳窗说 “cwd”路径错误,无法找到/mnt\ /home/…之类的。

用 vs2022 打开刚才新建的 demo.csproj,修改并保存 demo->Properties->launchSettings.json,如下:

{
  "profiles": {
    "mudr": {
      "commandName": "Project",
      "remoteDebugEnabled": true
    },
    "WSL": {
      "commandName": "WSL2",
      "workingDirectory": "/home/your.user.name/demo/bin/Debug/net8.0",
      "commandLineArgs": "/home/your.user.name/demo/bin/Debug/net8.0/demo.dll",
      "distributionName": "Ubuntu-24.04",
      "remoteDebugEnabled": true
    }
  }
}

现在就可以调试 wsl 下 C# 写的 app 了。

感谢以下文章对本次历程的帮助

让vs2022支持wsl(linux)本地调试.net工程
Linux安装vsdbg实现远程调试程序
无法使用 VS 2022 调试 WSL2 - 无效的“cwd”值

你可能感兴趣的:(c#,visual,studio,经验分享,linux)