微软官网有关远程调试的文章写的已经很好了,大家可以直接看官方文档:

附加到docker进程调试

我这里只是记录了学习的过程,以及踩的一些坑,仅供参考

环境

本机安装了 visual studio 2019

远程操作系统 ubuntu 16.04,安装了 docker 20.10.6

正文

附加到docker内调试asp.net core,既可以是本地的,也可以是远程的,我们先说远程的吧。

有两种方式,通过 ssh ,或者 docker daemon,我只研究了常用的ssh方式,因为我之前也是通过这种方式,实现了python、c++的调试,感觉很通用。

在 visual studio 里,打开 “调试-->附加到进程”,或者快捷方式"ctrl + alt + p",打开“附加到进程”窗口

docker login 登录远程仓库带密码 docker怎么远程debug_asp.net

然后展开 “连接类型”下拉菜单,选择“Docker(Linux 容器)”,接下来查找连接目标

docker login 登录远程仓库带密码 docker怎么远程debug_远程调试_02

然后把远程的ssh参数填好,注意,这个ssh,是主机的ssh,不是容器内的。如果配置成功,则会列出远程主机上正在运行的docker容器

docker login 登录远程仓库带密码 docker怎么远程debug_远程调试_03

我在处理这步的时候出现了错误,没法列出远程主机上正在运行的容器,后来发现,就是以前一个忽视掉的错误提示导致的:我在远程主机上运行docker时,总是提示docker的配置文件 permission denied ,然后在visual studio 的输出里,也提示无法解析docker配置,所以如果你也碰到这样的问题,那么需要在docker服务器上做如下操作

sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "/home/$USER/.docker" -R

然后就可以列出正在运行的docker容器的进程了

docker login 登录远程仓库带密码 docker怎么远程debug_asp.net_04

选中那个asp.net core进程,点“附加”,即可开始调试。

踩坑记

我在学习按附加到进程的方式远程到docker容器内远程调试asp.net core程序的过程中,就踩了个大坑

未能启动调试适配器“coreclr”。
Unable to find debugger script at '/root/.vs-debugger'.

经各种搜索,发现就是由于没有安装VSDbg导致的,而微软官网似乎只些了如何利用windows下的远程工具来远程调试的方法,以及讲解了如何通过ssh附加到远程进程的步骤。但我就是没找到怎么安装这个vsdbg的文章,可能是我没找到吧。最后看到了一篇git上的文章,才搞清楚了。点这里

然后安装的过程,也是极其痛苦,因为你我都懂的GW的问题。

我把安装脚本下载下来后,拷贝到docker里,然后运行脚本,我觉得首次下载好vsdbg包后,可以自己搭建一个web服务器存放起来,后面就可以直接从这个地方下了,我看网上有些文章也是这样写的。

docker login 登录远程仓库带密码 docker怎么远程debug_docker_05

注意,我把脚本拷贝进去时,忘记打一个斜杠了,最后保存成了 "axle_service"这个名字,原本的名字是“GetVsDbg.sh”,记得加上可执行权限,然后就慢慢等吧。当然大家可以想别的办法,先想办法快速下载下来,然后放到一个自己搭建的web服务器上,然后修改GetVsDbg.sh脚本,替换为你的下载地址,再执行脚本。

docker login 登录远程仓库带密码 docker怎么远程debug_远程调试_06

把红框中的改为你的下载地址就行了。当然网上还有另一种方式,就是把下载好的压缩包文件拷贝到 /root/.vs-debugger/vs2019/ 文件夹,把上述脚本里下载部分的逻辑注释掉也行。

搞好后,执行命令

sh GetVsDbg.sh -v vs2019 -l /root/.vs-debugger/vs2019

然后再执行本文章最开始的步骤,就可以了。

最后一个坑:要调试的话,就要拷贝debug版本以及pdb文件进去,否则即使你打了断点,也不会起作用的。