在VisualStudio中远程调试IIS站点
如何在本地调试服务器上的站点?
如果要在本地调试服务器上的站点我们需要用到一个远程调试工具msvsmon.exe。
我们可以再VS安装目录中找到它
如:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Remote Debugger\x64\msvsmon.exe
因为msvsmon.exe程序需要在服务器上运行我们可以将该程序所在目录设置为共享目录,或者直接将其复制到服务器上:
在运行msvsmon.exe程序前需要先关闭防火墙,如何熟悉防火墙配置可以进行具体的防火墙配置,
这里直接关闭防火墙,以保持通讯能够正常进行
现在在服务器上运行msvsmon.exe程序,可以从拷贝的文件中运行,也可以从共享目录中运行
这里我们以无身份验证的方式进行调试,打开工具中的选项菜单,进行如下配置
点击确定
此时我们的服务器也配置完毕。
现在开始在我们本机的VS中调试服务器上的站点。
打开我们的项目,在选择工具菜单栏下的附加到进程,选择远程方式进行传输
点击查找搜索网络中的主机
选择我们的服务器主机进行连接,附加我们要调试的工作进程
查看服务器上msvsmon程序的状态,可以看到连接成功
然后我们在VS中设置断点,并且访问我们的服务器站点
此时可以看到我们VS中的断点被没有中断,这是为什么呢?
我们查看一下输出窗口可以看到这么一条信息
我们的当前站点编译成的程序集的并没有加载到相应的PDB文件,所以无法进行调试。
此时我们就需要获取到程序集相应的PDB文件
这里我们可以直接将服务器上的发布文件直接拷贝到我们本地,并且对VS进行如下的配置
首先打开工具菜单栏中的选项,展开调试节点下的符号,添加一个新的符号文件位置,位置直接指向我们从服务器上拷贝下来的文件中的bin目录,
如果有多个站点就添加多个位置信息,也可指向远程服务器的共享目录位置,这里可能出现其他问题,暂不细述
接着我们展开调试选项中的常规节点,取消常规中要求源文件与原始版本完全匹配选项。因为我们的开发代码总会与发布的存在差异
再次附加进程看到输出中已加载符号
最后我们在访问我们服务器上的站点,可以看到断点被成功中断
注意:
1、在远程调试时服务器网站的访问会被中断,所以多个请求会导致调试结果出现差异
2、虽然我们可以新建多个msvsmon的实例进行运行,但是一个工作进程同时只能被一个用户附加
3、缺失的PDB文件不能直接指向我们的开发项目中的PDB所在bin目录,因为项目代码往往与发布站点的代码有所差异,
因为导致本地开发代码生成的PDB文件与发布站点的程序集无法正确匹配,因为PDB文件也无法被正确加载
4、可以使用网络共享或其他方式将服务器站点上的PDB文件公开出来,本地的VS获取PDB的位置可以直接指向它,因为PC与
网络环境的差异,此项尝试可能会存在问题,需要耐心测试(经测试,网络通畅下,正常可用)
5、本文的示例使用的是无验证方式的远程调试,存在一定的安全问题,也可以在msvsmon使用包含身份验证的远程调试,
在VS使用附加进程的方式时,直接使用默认的传输方式即可,此时需要进行计算机账户的配置
作者: 陌上荼靡