SharpDevelop中Debug ASP.NET程序

分享ASP.NETSharpDevelop by 达达 at 2008-03-25

用了将近一个月时间的SharpDevelop,因为一直开发类库项目,做测试时都是用NUnit,所以没遇到debug上的困难,顶多因为SharpDevelop的内部bug导致debug单元测试时出错,但通常重启下SharpDevelop就没事了。

今天开始给新的模块引擎做集成测试,用SharpDevelop建了一个ASP.NET项目,发现SharpDevelop没办法直接Debug这个ASP.NET项目。只好用Visual Studio来Debug了。

不能Debug ASP.NET项目的话岂不是太糟糕了。总不能装个SharpDevelop再装个Visual Studio吧,我都快准备把Visual Studio从我家里的电脑上清除了啊。于是我上网搜索了下,在mdibb.net看到了关于用SharpDevelop开发ASP.NET项目的文章。

原来.NET Framework SDK带了一个叫DebugCLR的程序。可以在 [Visual Studio目录或.NET SDK目录]\SDK[.NET版本号]\GuiDebug 中找到。

其实就是一个基于Visual Studio核心的Debug平台。没有语法着色,其他全部跟在Visual Studio中Debug一样。不过Debug的起始过程有点不太一样。需要你手动去“附加”到要调试的进程上。然后打开源代码文件,设置断点进行调试。

以下简述SharpDevelop + DebugCLR + IIS 在Window 2003下做调试的过程:

1.在IIS下新建一个站点或者虚拟目录,指向要Debug的ASP.NET项目所在的文件夹。 2.打开DebugCLR,并打开你要调试的源代码。不用打开整个项目中的代码,当你做单步跟踪时DebugCLR会自动为你打开文件,我们平时编译代码生成出来的.pdb文件中就包含了类对应的代码文件,和行数映射关系,这些就是调试用的 :) 3.选择DebugCLR主菜单中的“工具”->“附加到进程”。在弹出的对话框中找到IIS进程。Win2003下是w3wp。注意这时候进程应该是“悬挂”状态,就是没有任何正在执行的操作。 4.成功附着后就能做Debug了 :D

除了用IIS做服务器调试外还有一个方式,就是用平时Visual Studio调试ASP.NET时启动的那个"ASP.NET Development Server",我在电脑上搜索了下,发现在 C:\Program Files\Common Files\Microsoft Shared\DevServer\9.0 下可以找到这个程序,另外在 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 下也能找到,程序的名字叫WebDev.WebServer.exe。

不知道是不是装了Visual Studio才有的,有待验证,如果必须装Visual Studio才有的话,恐怕就得放弃这个方案了,呵呵。

我记得MonoRails有自带了一个类似的开发用的ASP.NET服务器。所以我特别载了MonoRails来装上,在 C:\Program Files\CastleProject\Bin\Dependencies 中找到了我说的那个小型ASP.NET服务器,名字叫做Cassini。上网搜索了下,发现Cassini其实是微软发布的一个示例型ASP.NET服务器,还提供了代码,呵呵。

不过Cassini在我电脑上每次都报无法在xxx端口监听的异常,我还没有跟踪它的源代码。我觉得Cassini如果能用的话会对我的模板引擎的单元测试很有帮助,有希望在单元测试中启动一个临时的ASP.NET服务器,让模板引擎的单元测试能更接近真实环境 :D