Смешанная отладка (C#, C ++) в VS Code через docker - PullRequest
1 голос
/ 19 марта 2020

Мы недавно перевели нашу разработку с Visual Studio на VS Code. Наше кодовое решение содержит. NET Core C#, который передает вычисления в C ++. В Visual Studio мы смогли беспрепятственно отлаживать между C# и C ++.

Мы изначально перешли к запуску многопроектного решения на ВМ и использованию функций удаленной разработки VS Код. Мы используем две конфигурации запуска:

{
            "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"
            }
        }
}

Сначала запускаем "Run C#", затем запускаем "(gdb) Attach" и выбираем процесс 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 .

Многие советы, которые я нашел, сбиты с толку из-за:

Как отлаживать C# и C ++, работающие в контейнере docker с использованием кода VS?

...