Visual Studio 2022远程调试 Ubuntu Docker中的 .net core应用程序

发布时间 2023-09-01 10:16:30作者: 我很菜鸟来了

Visual Studio 2022远程调试 Ubuntu Docker中的 .net core应用程序

在国内的服务器上进行远程调试还是比较麻烦的,因为我们没办法正常通过Curl获取到VsDbg包或者下载极其缓慢,需要挂上梯子才能正常下载。下边,我就带大家一步一步的重现问题,以及我解决该问题的方法。

步骤还原

第一步:点击菜单栏中的调试

第二部:附加到进程

第三步:选择要调试服务所在的Docker镜像

第四步:找到 dotnet进程并附加

然后,我们就得到了这个错误提示

或者

出现这个代表容器在下载必要的vsdbg包,但由于包的服务器在国外,是很难下载下来的,以至于会卡死在这样界面。所有接下来需要我们手动安装vsdbg包。

 

首先,先进入部署了asp.net的容器

docker exec -it [容器id] /bin/bash

查看容器内进程

 docker top 容器id

可以发现容器正在下载vsdbg包

当时使用vs2022附近容器时,你会发现/root/目录下多了.vs-debugger文件,这个文件下有 GetVsDbg.sh 和文件夹vs2022,我们打开GetVsDbg.sh文件,将关于下载部分代码给注释了

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
}

 使用梯子将这个连接 https://vsdebugger.azureedge.net/vsdbg-17-7-10808-2/vsdbg-linux-x64.tar.gz 下载下来得到vsdbg-linux-x64.tar.gz 文件。

使用拷贝命令将文件拷贝到容器的/root/.vs-debugger/vs2022/下

 docker cp vsdbg-linux-x64.tar.gz 容器id:/root/.vs-debugger/vs2022/

拷贝成功如下

Successfully copied 66.9MB to 容器id:/root/.vs-debugger/vs2022/

拷贝完毕后在容器输入

/bin/sh "/root/.vs-debugger/GetVsDbg.sh" -v vs2022 -l "/root/.vs-debugger/vs2022" -a "/remote_debugger"

#成功后会出现如下信息
Info: Previous installation at '/root/.vs-debugger/vs2022' not found
Info: Using vsdbg version '17.7.10808.2'
Using arguments
    Version                    : 'vs2022'
    Location                   : '/root/.vs-debugger/vs2022'
    SkipDownloads              : 'false'
    LaunchVsDbgAfter           : 'false'
    RemoveExistingOnUpgrade    : 'true'
Info: Using Runtime ID 'linux-x64'
Info: Successfully installed vsdbg at '/root/.vs-debugger/vs2022'

#出现版本信息,也能证明成功
cat /root/.vs-debugger/vs2022/success.txt /root/.vs-debugger/vs2022/version.txt 
17.7.10808.2
17.7.10808.2 commit:5bf8f05a9c75ab378bb111e5d3112f64e5d8b085

接下来可以进行远程调试了

成功进入断点

到此,我们就能愉快的进行调试了。