三、使用vscode在docker中debug
2017-07-11 16:42
447 查看
上篇博文中分享了如何用docker-compose搭建AspNetCore的开发环境,在开发过程中debug是必不可少的,如果你使用VS2017的话,右键就可以了,而作为跨平台的.net core开发的时候却要依赖VisualStudio,那一定算不上真正的跨平台,而且不是所有人都能买得起VS的许可证,买得起windows的授权,(我知道很多人都没买过:)所以这次来分享一下如何使用vscode在docker中debug。
我们知道vscode是可以远程debug的,参考OminiSharp的Wiki,其原理就是在服务器上安装.NetCore命令行调试工具
根据远程debug的启发,我们可以在docker中安装
首先通过命令
记得2个月之前用这个命令无法安装的
在容器中安装
最近.net core 2.0 发布了,这里的需要做一些更新,如下:
在vscode中项目根目录下的
主机是通过
sourceFileMap映射容器中程序所在的路径,这里就是之前Dockerfile中的
那么现在咱们
F5进入Debug模式,在程序中设置一个断点,当程序运行到这里的时候就变黄了,
和VisualStudio一摸一样。
当然也可以不用单独build这个容器,直接放在之前讲的docker-compose中,效果也是一样的。
我们知道vscode是可以远程debug的,参考OminiSharp的Wiki,其原理就是在服务器上安装.NetCore命令行调试工具
VSDBG,然后本地vscode通过ssh隧道建立和服务器之间的连接,控制服务器上的
VSDBG进行断点调试。
根据远程debug的启发,我们可以在docker中安装
VSDBG,vscode访问容器中的
VSDBG进行断点调试,原理和上面的远程debug一样,区别在于可以直接访问容器而不需要ssh。
首先通过命令
curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
记得2个月之前用这个命令无法安装的
VSDBG,因为里面的工具包下载不了,只能手动把对应版本的工具包下载下来,然后上传到自己的文件服务器,再替换脚本中的下载地址,折腾的好烦人。现在可以直接下载了,非常开心😄。
在容器中安装
VSDBG,具体的Dockerfile如下:
FROM microsoft/aspnetcore:1.1.1 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \ && apt-get update \ && yes | apt-get install curl unzip \ && curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg WORKDIR /app VOLUME /app ENV ASPNETCORE_ENVIRONMENT Development ENTRYPOINT ["dotnet", "Web.dll"]
最近.net core 2.0 发布了,这里的需要做一些更新,如下:
FROM microsoft/aspnetcore:2.0 /*更新到2.0的镜像*/ LABEL Name=aspnetcore-debug Version=latest ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \ && apt-get update \ && apt-get install -y curl unzip \ && apt-get install -y procps \ /*最新的镜像中没有ps,所以需要安装*/ && curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg WORKDIR /app VOLUME /app
在vscode中项目根目录下的
.vscode文件夹中的
lunch.json的
configurations节点中追加一个debug配置:
{ "name": ".NET Core Remote Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickRemoteProcess}", "pipeTransport": { "pipeProgram": "bash", "pipeArgs": [ "-c", "docker exec -i 你的容器名称 ${debuggerCommand}" ], "debuggerPath": "/root/vsdbg/vsdbg", "pipeCwd": "${workspaceRoot}", "quoteArgs": true }, "sourceFileMap": { "/app": "${workspaceRoot}" }, "justMyCode": true }
主机是通过
docker exec -i 你的容器名称 ${debuggerCommand}命令和容器进行交互的,不了解
docker exec的可以去查看一下文档。
"sourceFileMap": { "/app": "${workspaceRoot}" },
sourceFileMap映射容器中程序所在的路径,这里就是之前Dockerfile中的
WORKDIR的路径。
那么现在咱们
dotnet publish -c Debug src/Web/Web.csproj发布这个项目,然后Build容器,
docker build -t myweb,接着
docker run -t -name MyDebugWeb myweb,现在容器已经运行了,在vscode中的Deubg中选择刚才新建的
.NET Core Remote Attach
F5进入Debug模式,在程序中设置一个断点,当程序运行到这里的时候就变黄了,
和VisualStudio一摸一样。
当然也可以不用单独build这个容器,直接放在之前讲的docker-compose中,效果也是一样的。
相关文章推荐
- 使用VsCode开发React-Native[debug调试+智能提示]
- 如何使用 vscode 对基于 Docker 的 PHP 进行断点调试
- (原創) 使用preprocessor directive留住debug code (.NET) (C#)
- 欢迎使用 FreeCode for VS60/VS2005 Add-in
- ADS使用错误 could not open file debugrel \objectcode
- 使用VS把ASP.NET 5的应用发布到Linux的Docker上
- 使用VS 2013的Bing Code Search插件写SharePoint代码
- VS 2003使用第三方程序启动不能Debug的解决方法
- 【debug】vs2013中定义的全局变量count在使用时提示:“不明确的符号”
- 使用Sourcery CodeBech Lite debug Arm/Linux应用程序
- ADS使用错误 could not open file debugrel \objectcode
- 使用VS把ASP.NET 5的应用发布到Linux的Docker上
- 欢迎使用 FreeCode for VS60/VS2005 Add-in
- VS 2008 Tracepoints – Debug output without touching your code (Say goodbye to Debug.Write ?)
- 欢迎使用 FreeCode for VS60/VS2005 Add-in
- vs2008插件_VSDebugHelper使用
- 欢迎使用 FreeCode for VS60/VS2005 Add-in
- 欢迎使用 FreeCode for VS60/VS2005 Add-in
- 使用VS进行工作流开发系列博客7-Developing Workflows in VS: Part6 - Deploy and Debug your workflow
- PHP学习笔记 - 在Eclipse中使用XDebug调试代码 | Using XDebug debug code in eclipse