在 VS2017 中从容器内部附加到正在运行的进程

25

有没有一种简单的方法可以从Visual Studio远程调试运行在Linux容器中的进程?

想象一下这样的场景,我们在某个远程机器上部署了多个运行在docker容器中的服务 - 开发环境。在测试过程中,我们检测到其中一个服务的内部状态变得不稳定,需要弄清楚里面发生了什么。我们不想在本地执行docker-compose up,因为我们可能无法模拟这种情况。

相反,我们想要附加到容器内部运行的进程。

我看过多篇关于如何做到这一点的文章,但它们要么是关于Windows容器 (https://www.richard-banks.org/2017/02/debug-net-in-windows-container.html),要么就非常混乱(例如,我需要安装sshd才能从VS连接吗?我需要像这里https://github.com/Microsoft/generator-docker/issues/130所述那样安装vsdbg吗?)

我尝试在容器中安装vsdbg和ssh,但Visual Studio无法找到任何远程连接(在Debug -> Attach to Process中)。

是否有针对VS2017&远程调试&Docker Linux容器的特定教程?


基于这份文档和一个案例,使用vsdbg与sshd会有所不同:https://visualgdb.com/tutorials/linux/docker/ 和 https://dev59.com/SVcP5IYBdhLWcg3wcZgk,如果可能的话,您可以查看它们的详细步骤。 - Jack Zhai
你有没有找到关于这个主题的任何信息?我有一个类似的问题 - https://dev59.com/FlYM5IYBdhLWcg3wlQ0i - Shrike
4个回答

0

我曾经为我的Django应用程序做过类似的事情。

也许您的代码不是用Python编写的,但逻辑是相同的:

  • 在调试模式下运行服务器
  • 将配置映射到本地代码与远程代码之间
  • 在VS Code中启动调试

在Docker中创建一个脚本,根据APP_MODE_DEBUG的值启动服务器:

if [[ -n "${APP_MODE_DEBUG-}" && "$APP_MODE_DEBUG" == "yes" ]];then
    echo 'WARNING: running in dev mode'
    echo 'IMPORTANT: remember start server with vscode debug'
    pip install debugpy -t /tmp && python /tmp/debugpy --wait-for-client --listen 0.0.0.0:5678 manage.py runserver 0.0.0.0:8000
    
else
    echo 'running in prod mode'
    gunicorn myapp.conf.wsgi:application --conf /app/server_conf.py
fi

如果服务器以调试模式启动,您需要在VSCode中使用以下配置进行调试:
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
        {
            "name": "MyApp: Debug",
            "type": "python",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 5678
            },
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}/MyApp",
                    "remoteRoot": "/app"
                }
            ],
            "justMyCode": false
        }
    ]
}

** 重要提示:

  • 请记得将localhost更改为您的远程服务器,将remoteRoot更改为容器内代码的位置。
  • 启用端口调试访问,以便从本地访问

现在您可以在VSCode中进行调试 输入图像描述


0

您可以尝试使用gdb和ssh进行调试,就像在此页面中所示:https://learn.microsoft.com/en-us/cpp/linux/connect-to-your-remote-linux-computer,但这将把该进程视为本地/非托管进程。它基本上是用于调试C++应用程序。

对于远程调试托管进程(如C#,VB,F#等),您可以使用“VS的远程调试工具”,但它们仅适用于Windows。因此,目前您无法在Linux容器上远程调试C#应用程序。 希望这澄清了事情。


0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接