The*_*rew 5 debugging docker visual-studio-code
我们最近将开发从 Visual Studio 转移到 VS Code。我们的代码解决方案包含 .NET Core C#,它将计算交给 C++。在 Visual Studio 中,我们能够在 C# 和 C++ 之间无缝调试。
我们最初转而在虚拟机中运行多项目解决方案并使用VS Code 的远程开发功能。我们使用两种启动配置:
{
"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 Code Online (Sandbox Code Playgroud)
首先运行“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"
]
}
Run Code Online (Sandbox Code Playgroud)
在此设置中,我们已经能够成功地分别调试 C# 和 C++ 代码,但是上述运行 C# 项目并在其后附加 GDB 的流程无法按预期工作。C# 进程退出,而“(gdb) Attach”调用启动多个进程,这些进程在启动时会遇到各种异常。我已将完整输出粘贴到 Pastebin。
我发现的许多建议都令人困惑,原因如下:
runArgs中的描述:
例如, "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ] 允许基于 ptrace 的调试器(如 C++)在容器中工作。
我应该如何使用 VS Code 调试在 docker 容器中运行的 C# 和 C++?
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |