微软官网有关远程调试的文章写的已经很好了,大家可以直接看官方文档:
我这里只是记录了学习的过程,以及踩的一些坑,仅供参考
环境
本机安装了 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(Linux 容器)”,接下来查找连接目标
然后把远程的ssh参数填好,注意,这个ssh,是主机的ssh,不是容器内的。如果配置成功,则会列出远程主机上正在运行的docker容器
我在处理这步的时候出现了错误,没法列出远程主机上正在运行的容器,后来发现,就是以前一个忽视掉的错误提示导致的:我在远程主机上运行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容器的进程了
选中那个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服务器存放起来,后面就可以直接从这个地方下了,我看网上有些文章也是这样写的。
注意,我把脚本拷贝进去时,忘记打一个斜杠了,最后保存成了 "axle_service"这个名字,原本的名字是“GetVsDbg.sh”,记得加上可执行权限,然后就慢慢等吧。当然大家可以想别的办法,先想办法快速下载下来,然后放到一个自己搭建的web服务器上,然后修改GetVsDbg.sh脚本,替换为你的下载地址,再执行脚本。
把红框中的改为你的下载地址就行了。当然网上还有另一种方式,就是把下载好的压缩包文件拷贝到 /root/.vs-debugger/vs2019/ 文件夹,把上述脚本里下载部分的逻辑注释掉也行。
搞好后,执行命令
sh GetVsDbg.sh -v vs2019 -l /root/.vs-debugger/vs2019
然后再执行本文章最开始的步骤,就可以了。
最后一个坑:要调试的话,就要拷贝debug版本以及pdb文件进去,否则即使你打了断点,也不会起作用的。