天天看點

在Apache上調試Asp.net 1.1/2.0代碼

我們知道ASP.NET

into/out調試呢?

    由于Apache2項目中的mod_aspdotnet

sub-project實作上的問題(也可以說是bug吧),使我們在其上運作ASP.NET程式時,和在IIS上的aspnet_wp|w3wp中運作的正确性上有一些差别,是以在Apache(mod_aspdotnet)上調試ASP.NET項目的源代碼就很有必要。雖然ASP.NET

2.0已經正式release,不過1.1版本的項目還是目前的主流,是以我們分别看看Apache對這兩個版本Framework的支援。正如我前面所說,ASP.NET

1.1的項目緊密地依賴IIS,是以目前我隻能在Apache上調試已有的ASP.NET

1.1項目,而不能建立(原因後面再說)。由于IIS先安裝并占用了80端口,是以我的Apache Web

Server就隻能運作在其它端口上了(如:8080,通過httpd.conf檔案配置)。

    首先,我們需要讓這個被調試的項目在IIS上運作正确,并且項目可以被VS.NET

"Show system processes")裡居然有兩個Apache.exe程序

在Apache上調試Asp.net 1.1/2.0代碼

。這裡我也不知道應該是哪個,雖然它們的類型都是".NET,

Win32",不過隻有一個是mod_aspdotnet的宿主程序。當然我們還是可以用個小trick來判斷,就是打開taskmgr并重新整理Apache上運作的Web站點的頁面,看那個Apache.exe程序占用CPU,那麼它就是asp.net支援子產品的宿主

在Apache上調試Asp.net 1.1/2.0代碼

。Attach成功後就可以在VS.NET裡面設定斷點,進行step

into/out的源代碼級調試了。

    上面是對ASP.NET 1.1項目的調試方法,如果是ASP.NET 2.0的項目呢?由于.NET

Framework及Visual

Studio 2005的改進,調試2.0的ASP.NET項目變得奇easy! 隻需要把項目在Apache上運作好後,用Visual Studio

2005打開希望調試的頁面的源代碼(*.cs)檔案,Attach上Apache的程序後直接設定斷點就可以了,根本不需要開啟項目,當然也就和IIS完全脫離關系了

在Apache上調試Asp.net 1.1/2.0代碼

    // 不管是1.1還是2.0,都需要确定到底是哪個Apache.exe程序是宿主

在Apache上調試失敗的已知可能問題:

1、沒有使用debug版的項目dll來運作,這個。。。還是問題嗎

在Apache上調試Asp.net 1.1/2.0代碼

2、第二種情況,如果不注意,可能會認為是Apache不能調試1.1的Asp.net。就是如果機器上同時裝了Fx1.1和Fx2.0,mod_aspdotnet會預設把我們的ASP.NET程式加載在Fx2.0上運作,這時如果用VS.NET

2003去調試将無法Attach任何Apache.exe程序

在Apache上調試Asp.net 1.1/2.0代碼

。當然用Visual Studio 2005是可以的。解決辦法需要在httpd.conf中使用"AspNetVersion

v1.1.4322"指令顯示指定Asp.net程式運作時的.NET Framework版本。

前面我提到了1.1版本的Asp.net項目的建立必須要IIS,這是因為在建立項目時VS.NET

2003需要向IIS擷取目前其支援的Asp.net的版本資訊,然後通過一些Get和Post操作,建立一些項目必須檔案在伺服器上,具體步驟如下: 

在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼

Created ASP.NET Project by VS.NET 2003 Command#region Created ASP.NET Project by VS.NET 2003 Command

在Apache上調試Asp.net 1.1/2.0代碼

GET localhost/DebugDemo/get_aspx_ver.aspx

在Apache上調試Asp.net 1.1/2.0代碼

500 Internal Server Error

在Apache上調試Asp.net 1.1/2.0代碼

GET localhost/get_aspx_ver.aspx

在Apache上調試Asp.net 1.1/2.0代碼

404 Not Found

在Apache上調試Asp.net 1.1/2.0代碼

GET localhost/DebugDemo/vs28758389629759149_tmp.htm

在Apache上調試Asp.net 1.1/2.0代碼

200 OK

在Apache上調試Asp.net 1.1/2.0代碼

POST localhost/DebugDemo/_vti_bin/_vti_aut/author.dll

在Apache上調試Asp.net 1.1/2.0代碼

100 Continue

在Apache上調試Asp.net 1.1/2.0代碼

401 Access denied

在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼

401 Access Denied

在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼

POST localhost/_vti_bin/_vti_aut/author.dll

在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼

POST localhost/_vti_bin/_vti_adm/admin.dll

在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼
在Apache上調試Asp.net 1.1/2.0代碼

#endregion

    同樣在ASP.NET

2.0中,這個步驟完全不需要了,ASP.NET項目就是一個目錄,完全的和Web

Server脫離開了。我們也就再也不用因為IIS的搗亂,而使的不能開發ASP.NET程式了~~~

本文轉自部落格園鳥食軒的部落格,原文連結:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原部落客。

繼續閱讀