概述
当有些情况,测试环境发现bug,但是本地有不好复现或者没法复现的时候,这时候就需要用到远程调试了,通过在测试环境上安装一个调试工具,然后就可以在本地运行代码来远程连接到测试服务器来调试代码。
当前项目是一个老项目,部署在IIS中,关于如何部署服务到IIS,请查阅
准备
首先我们需要先准备工具,可以直接去官网进行下载安装
![null f45c871cfcbb0f0b1076723ef77e80c5.png](https://i-blog.csdnimg.cn/blog_migrate/18427aadcc09e87a9a1cb8dffde860e7.png)
下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/?rr=https://docs.microsoft.com/en-us/visualstudio/debugger/remote-debugging?view=vs-2022
或者如果直接将vs安装路径的Remote Debugger拷贝到指定的服务器上进行运行,比如我从本地的VS路径安装路径中找到为:
![null 9d24c37e6dcfd08961c7227ee0b8fc8a.png](https://i-blog.csdnimg.cn/blog_migrate/469bdb0ffe6fa0ea2f00374588d73b8a.png)
地址:D:\Program Files\VS\2022\Enterprise\Common7\IDE\Remote Debugger
操作
运行调试工具
我是直接拷贝的VS安装路径的Remote Debugger到服务器,所以我直接找到该文件夹x64下的msvsmon.exe文件进行启动,启动并连接的效果如下
![null f7420775b3b805b0baf8542c5ed7c3dd.png](https://i-blog.csdnimg.cn/blog_migrate/b4f3e602b92064043d7923b922d11f7b.png)
我们可以在Tools=>Options中设置远程端口以及认证模式等,因为我只是内网的测试环境,所以直接设置为允许任何人连接,并且端口为4026
![null 7b58e03f034da9ecf550b3d10b5fb134.png](https://i-blog.csdnimg.cn/blog_migrate/6bdc3fc19357890b0274610387e4f18a.png)
点击OK,那么远程调试工具就配置好了。
注意:因为我们要让其他机器连接当前服务器,所以需要开放端口或者关闭服务器的防火墙等。
发布代码
因为调试的代码只支持Debug模式的代码,所以需要将我们的代码重新发布一下,然后拷贝发布的文件到服务器重新部署。
注意:当本地的代码和测试环境代码有差异的时候,也不会命中我们在本地VS代码加的断点。
VS调试
使用VS2022打开我们的代码,然后选择调试=>附加到进程
![null 7566467185f1cf8fd234189782160abd.png](https://i-blog.csdnimg.cn/blog_migrate/b34edf52a066f562ae36feec66ca2e3b.png)
点击附加进程,然后连接类型选择远程(无身份验证),然后再连接目标输入远程服务器的IP+远程调试工具设置的端口,然后直接回车就会出来可附加的进程列表
![null 81128af26724011a459433847ec7943b.png](https://i-blog.csdnimg.cn/blog_migrate/7657cc2ebd2c92078217dc1bbd49ec3e.png)
另外这里的连接类型还支持其他的,比如
![null 97aae5d8fecead09277e9d24de63bd39.png](https://i-blog.csdnimg.cn/blog_migrate/cbc52330757129571b21cf501367aeee.png)
可以根据实际情况选择
出来进程列表后,如果内容多可以在右侧进行搜索,然后选择指定的进程,如果是IIS服务然后没看到,可以再次访问一下系统,然后就可以看到了
![null b29984221402252ebfe27493ad116eec.png](https://i-blog.csdnimg.cn/blog_migrate/bf792f68254bcb514e1143ee49b2c906.png)
找到要附加的进程,然后选中点击附加,如图
![null 10f0a01c0365b582cb3fe6286842374f.png](https://i-blog.csdnimg.cn/blog_migrate/5ca05e8efc9cfc14d12ed165bcfb89e0.png)
点击附加后就可以在代码中设置断点,然后在页面触发后进入断点进行调试了。
总结
通过该方案在有些情况下还是很方便找到问题的,如果没有进到断点就需要检查下是否是Debug版本或者代码和服务器版本是否存在差异等。
资料
远程调试IIS上的ASP.NET Core:https://learn.microsoft.com/zh-cn/visualstudio/debugger/remote-debugging-aspnet-on-a-remote-iis-computer?view=vs-2022
远程调试IIS上的ASP.NET:https://learn.microsoft.com/zh-cn/visualstudio/debugger/remote-debugging-aspnet-on-a-remote-iis-7-5-computer?view=vs-2022