想用 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
条件及主要步骤,可按官方文档进行,但官方文档所述不够详细,而且过程中有几处未提到的问题。
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”值