调试ASP.NET Core Docker容器时VS Code无法显示代码的问题排查
问题定位与解决
你的问题根源是launch.json中的sourceFileMap配置错误,和卷映射无关。
原因分析
断点能触发,说明调试器已经成功附加到容器内的.NET进程,且卷映射(./src:/app/)是正常工作的——本地代码已经挂载到容器的/app/目录,进程能读取到代码并运行。但VS Code无法加载对应本地代码,是因为你在sourceFileMap里把容器内的/work路径映射到本地${workspaceRoot}/src/,但实际上容器里的代码路径是/app/,两者不匹配,导致调试器找不到本地代码文件的对应位置。
修复步骤
修改launch.json中的sourceFileMap配置,把容器内的路径改为/app:
{ "version": "0.2.0", "configurations": [ { "name": ".NET Core Docker Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickRemoteProcess}", "pipeTransport": { "pipeProgram": "docker", "pipeArgs": [ "exec", "-i", "csharp" ], "debuggerPath": "/root/vsdbg/vsdbg", "pipeCwd": "${workspaceRoot}", "quoteArgs": false }, "sourceFileMap": { "/app": "${workspaceRoot}/src/" } } ] }
额外优化建议
- 你的Dockerfile里执行了
dotnet publish生成Release包,但最后用dotnet run直接运行源码,调试场景下可以去掉dotnet publish步骤,减少镜像构建时间; - 确保本地代码和容器内挂载的代码完全一致,避免因为代码版本不一致导致断点位置偏移。
内容的提问来源于stack exchange,提问作者Sachin Maharjan
相关产品推荐
相关产品推荐

