您的位置:首页 > 运维架构 > Docker

三、使用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命令行调试工具
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中,效果也是一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: