不知道大家有没有遇到过这种情况,刚开发完的程序,明明在本机能够好好的运行,可是部署到服务器过分发给用户时,总是出现莫名其妙的错误。

一时半会又看不出问题来,怎么办呢?难道只能在服务器或是客户电脑上装一个vs、跟一下代码吗?

其实不用的,vs有一个远程调试的功能。

这个功能是这样的,程序在其他的电脑上运行,但是我们可以在本地电脑上进行断点跟踪。

无身份验证的远程调试(如果要用有身份验证,又没有域环境,参见最后的总结),同时也说一下vs2012与以前版本在远程调试功能方面的改进。

1、从开始菜单中打开“Remote Debugger”文件夹,打开之后,你会看到两个文件夹,这个是要复制到远程计算机上的,只需要根据具体环境从两个里选出一个复制过去就好了。


resin配置远程调式 远程调试功能_服务器


resin配置远程调式 远程调试功能_身份验证_02

2、复制完之后,在远程电脑上打开vs远程调试监视器(“msvsmon.exe”),会出现下图中的窗口,点击选项菜单,选中无身份验证和允许任何用户进行调试。

然后点击确定,这样,远程计算机就设置好了。当然,别忘了在远程计算机上启动你要调试的程序。


resin配置远程调式 远程调试功能_身份验证_03


resin配置远程调式 远程调试功能_远程调试_04

3、然后,我们在自己的电脑上,打开项目,从调试菜单打开附加到进程窗口,选择远程,输入远程计算机的ip,然后回车;

再选择要调试的程序,点击附加按钮。好了,点个断点,试试吧。


resin配置远程调式 远程调试功能_服务器_05


resin配置远程调式 远程调试功能_resin配置远程调式_06

4、vs2012与之前版本的不同。

看看这张图,是不是很熟悉,不就是在远程计算机上的设置窗口嘛。呵呵,再仔细看看,这个张图和前面那张是不一样的。看到“仅限本机”几个字了吧。

这张图是从vs2010的远程调试监视器中截下来的,这个仅限本机是什么意思呢?经过几次试验,我得出一个结论,这个“本机”的意思,应该是“本地代码”,

和“托管代码”是想对应的。如果用vs2012之前的版本,也按照前三节所说的方法设置,是没有办法“断点”的,因为我们要调试的代码是“托管代码”。

那么,此时应该怎么设置呢?我们只能选择“Windows 身份验证”那个单选框了。附加的时候,也不能再选择远程了,只能选择“默认”。

总结一下,如果用vs2012之前的版本进行远程调试需要注意的几点:

a、不能选择无身份验证

相同的帐号密码

包含“.pdb”文件


resin配置远程调式 远程调试功能_身份验证_07


resin配置远程调式 远程调试功能_远程调试_08


resin配置远程调式 远程调试功能_服务器_09

有的时候开发环境没问题的代码在生产环境中会某些开发环境无法重现的问题,或者需要对生产环境代码进行远程调试该怎么办?

Vs已经提供给开发者远程调试的工具

resin配置远程调式 远程调试功能_resin配置远程调式_10

 

下面简单讲讲该怎么用,

前期准备:

1、本地登录账户,密码跟远程服务器保持一致(VS2012以前需要,现在我没测试,干脆也搞一样,省得出问题)

2、根据服务器系统版本拷贝对应的远程调试工具到服务器

然后运行里面的msvsmon.exe

resin配置远程调式 远程调试功能_resin配置远程调式_11



3、本地开启VS,工具-》附加进程

resin配置远程调式 远程调试功能_远程调试_12



注意:限定符这里要填写计算机名,不能填写IP,我填写IP直接报错
本地代码跟服务器代码一致,PDB文件必须拷贝
当然添加计算机名之前先要在C:\windows\system32\drivers\etc\ 下面的hosts文件做服务器计算机名的本地解析即可!
如果你监控的是IIS进程,没有查看到对应站点进程,你可以在本地访问远程站点,再刷新就会看到了

附加进程后,直接本地打断点调试,远程调试会有点慢

resin配置远程调式 远程调试功能_服务器_13