首页 > 解决方案 > 通过 docker 在 VS Code 中混合调试(C#、C++)

问题描述

我们最近将我们的开发从 Visual Studio 转移到了 VS Code。我们的代码解决方案包含将计算交给 C++ 的 .NET Core C#。在 Visual Studio 中,我们能够在 C# 和 C++ 之间进行无缝调试。

我们最初转向在 VM 中运行多项目解决方案并使用 VS Code 的远程开发功能。我们使用两种 Launch 配置:

{
            "name": "(gdb) Attach",
            "type": "cppdbg",
            "request": "attach",
            "program": "/usr/share/dotnet/dotnet",
            "processId": "${command:pickProcess}",
            "additionalSOLibSearchPath": "${workspaceFolder}/src/build/Debug/Cpp/",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
        {
            "name": "Run C#",
            "type": "coreclr",
            "request": "launch",
            // If you have changed target frameworks, make sure to update the program path.
            "program": "${workspaceFolder}/src/AppProject/bin/Debug/netcoreapp2.2/AppProject.dll",
            "args": [],
            "cwd": "${workspaceFolder}/src/AppProject",
            "stopAtEntry": false,
            // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development",
                "EnvironmentName": "Development",
                "LD_LIBRARY_PATH": "${workspaceFolder}/src/build/Release/Cpp/;$LD_LIBRARY_PATH"
            },
            "sourceFileMap": {
                "/Views": "${workspaceFolder}/Views"
            }
        }
}

首先运行“运行 C#”,然后运行“(gdb)附加”并选择dotnet要附加到的进程。这很奏效,使我们能够从 C# 降级到 C++。

我们现在已经转移到一个 Docker 设置,其中源被安装到一个容器中,其中内置了构建工具(如 VS Code 文档中所述)。这大致是我们的devcontainer.json

{
    "image": [custom image in a private code repository],
    "forwardPorts": [various ports to serve web interfaces],
    "runArgs": [
        "--cap-add=SYS_PTRACE",
        "--security-opt",
        "seccomp=unconfined"
    ],
    "extensions": [
        "ms-vscode.cpptools",
        "ms-vscode.cmake-tools",
        "hbenl.vscode-test-explorer",
        "derivitec-ltd.cmake-test-adapter",
        "ms-dotnettools.csharp",
        "fernandoescolar.vscode-solution-explorer",
        "derivitec-ltd.vscode-dotnet-adapter"
      ],
      "mounts": [
          "source=${localEnv:HOME}/.gitconfig,target=/root/.gitconfig,type=bind,consistency=cached",
          "source=${localEnv:HOME}/.ssh,target=/root/.ssh,type=bind,consistency=cached"
      ]
  }

在此设置中,我们已经能够成功地分别调试 C# 和 C++ 代码,但是上述运行 C# 项目并在其后附加 GDB 的流程无法按预期工作。C# 进程退出,而“(gdb) Attach”调用启动多个进程,这些进程在启动时遇到各种异常。我已将完整输出粘贴到 Pastebin

我发现的许多建议都很困惑,原因是:

我应该如何使用 VS Code 调试在 docker 容器中运行的 C# 和 C++?

标签: dockerdebuggingvisual-studio-code

解决方案


推荐阅读