1. 问题背景
一些复杂的多系统耦合的ASP.NET程序往往不便于,发布到服务器之后,可能有些bug本地调试不会出现或很难重现,这种情况下,通过输出日志,也可以确定问题原因,但总是不如直接调试代码来的快,通过VS2015的远程调试功能,可以实现远程调试已经部署到服务器上web程序。
下面详述配置远程调试环境的步骤,配置好远程调试环境后,调试过程和本机调试基本一样。
2. 配置过程
2.1. 配置服务端
安装VS2015的时候,同时安装了一个远程调试代理程序,在安装目录下的“Remote Debugger”文件夹,首先将“Remote Debugger”文件夹复制到要调试的服务器上。
然后启动x64或x86下的msvsmon.exe,这个要和你安装的vs2015版本想匹配,如下:
默认监听端口是4020,单击“工具|选项”菜单命令,可以修改端口号,并设置为无身份验证模式:
之后,可以调试代理就开始工作:
2.2. 编译部署程序
建议直接部署debug版程序,调试信息完整,更容易调试。
如果部署release版程序,需要配置编译参数,生成pdb调试符号文件,最好同时禁止优化。
在项目“属性|生成”窗口,取消优化代码:
点击底部的“高级”按钮,输出调试信息选项,选择“full”生成完整调试符号文件:
编译完成后,将编译好的dll文件及调试符号文件pdb文件,拷贝到服务器上。
2.3. VS2015远程调试
启动VS2015并打开工程,选择“调试|附加到进程…”命令:
第一步,选择“远程(无身份验证)”传输模式;
第二步,输入远程服务器IP及远程调试端口号,敲回车键;
第三步,勾选底部“显示所有用户的进程”,选择ww3wp.exe进程,单击“附加”按钮;
第四步,设置断点,在浏览器中打开远程服务器上URL地址,开始远程调试,和本地调试基本一样。
2.4. 无法命中断点问题
此时设置断点会提示“当前无法命中断点,还没有为该文档加载任何符号”,需要在“工具|选项”窗口,“调试|常规”页面,取消“要求源文件与原始版本完全匹配”选项,如下图:
2.5. 反应迟钝问题
与本地调试相比远程调试反应迟缓,因为每次中断运行,服务端都需要将中断现场的进程、线程、模块、寄存器、堆、栈等各种调试信息甚至一些内存块信息传送到本地,导致延迟,所以远程调试的时候尽量少设置断点,尽量不逐行调试。
2.6. C/C++程序远程调试问题
该文虽然针对的是ASP.NET程序的远程调试设置,对于C/C++程序的远程调试设置也类似,因为不管是哪种程序,远程调试的流程都是一样的。都是通过远程调试代理,将远程调试进程的调试信息,发送到本地IDE调试器,本地调试器将设置的断点信息,控制指令,通过远程调试代理发送给远程调试进程。