博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三、使用vscode在docker中debug
阅读量:4841 次
发布时间:2019-06-11

本文共 2541 字,大约阅读时间需要 8 分钟。

中分享了如何用docker-compose搭建AspNetCore的开发环境,在开发过程中debug是必不可少的,如果你使用VS2017的话,右键就可以了,而作为跨平台的.net core开发的时候却要依赖VisualStudio,那一定算不上真正的跨平台,而且不是所有人都能买得起VS的许可证,买得起windows的授权,(我知道很多人都没买过:)所以这次来分享一下如何使用vscode在docker中debug。

我们知道vscode是可以远程debug的,参考,其原理就是在服务器上安装.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.1ENV TZ=Asia/ShanghaiRUN 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 ~/vsdbgWORKDIR /appVOLUME /appENV ASPNETCORE_ENVIRONMENT DevelopmentENTRYPOINT ["dotnet", "Web.dll"]

最近.net core 2.0 发布了,这里的需要做一些更新,如下:

FROM microsoft/aspnetcore:2.0 /*更新到2.0的镜像*/LABEL Name=aspnetcore-debug Version=latestENV TZ=Asia/ShanghaiRUN 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 /appVOLUME /app

在vscode中项目根目录下的.vscode文件夹中的lunch.jsonconfigurations节点中追加一个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

688499-20170711163244009-758950103.png
F5进入Debug模式,在程序中设置一个断点,当程序运行到这里的时候就变黄了,
688499-20170711163441181-683315071.png
和VisualStudio一摸一样。

当然也可以不用单独build这个容器,直接放在之前讲的docker-compose中,效果也是一样的。

转载于:https://www.cnblogs.com/kexxxfeng/p/7151325.html

你可能感兴趣的文章
博文汇总
查看>>
在Java大环境下.NET程序员如何夺得一线生机
查看>>
GUID做主键真的合适吗
查看>>
【linux之路】常用的命令
查看>>
git将某个分支的代码完全覆盖另一个分支
查看>>
概率DP RED IS GOOD
查看>>
Linux Shell 小脚本经典收藏
查看>>
go tool proof
查看>>
numpy数组及处理:效率对比
查看>>
Luogu P1318 积水面积
查看>>
前台线程 和 后台线程
查看>>
PHP性能优化大全(转)
查看>>
shell编程
查看>>
ImageSwitch+Gallery
查看>>
【软件需求工程与建模 - 小组项目】第0周:团队成员介绍
查看>>
unresolved external symbol "public: virtual __thiscall...错误
查看>>
php连接oracle oracle开启扩展
查看>>
入门自定义标签,(在SSH里面有自定义标签的练习)
查看>>
最近遇到的一些问题汇总
查看>>
mysql插入数据报错一二
查看>>