ASP.NET出錯的幾個原因

 無法在服務器上啓動調試(Unable to start debugging on the Web server)

原因1:IIS的應用程序設置並沒有使用集成windows認證,打開windows集成認證選項

原因2:檢查IIS中的"保持HTTP連接"選項,確保該選項爲選中狀態

消息2:您沒有在服務器啓動調試的權限(You do not have permission to debug the server)

原因1:確保windows集成認證選項打開

原因2:如果您打開了windows集成認證選項的話,確保您的用戶帳號具有對IIS目錄的完全控制權

原因3:如果您的Web項目使用額完整的機器名作爲項目名稱(machinename.domainname.something)的話,那麼這個Web站點就會被認爲是一個Internet站點,所以IE的缺省設置就會影響登陸狀態,在這種情況下,您需要在IE設置的Internet區域中允許您使用當前用戶帳戶登陸;這並不是IE的缺省設置,所以您最好使用你的機器名稱來作爲您項目的名字!

消息3:當發送HTTP調試請求時發生服務器端錯誤(Server side-error occurred on sending debug HTTP request)

原因1:您的Web應用程序可能沒有應用程序名稱,解決這個問題,您需要使用IIS MMC爲您的Web項目分配一個應用程序名稱;

原因2:如果您正在使用NTFS文件系統的話,確保aspnet帳戶對於wwwroot或您的應用程序文件夾具有適當的讀寫權限

消息4:當前項目沒有被配置爲允許調試(The project is not configured to be debugged)

對於這個錯誤,您需要確保您的Web被配置爲調試狀態,完成這項工作,您需要在web.config中設置debug=true

原因1:asp.net 調試在項目屬性中沒有被開啓;

原因2:請確認所期望的DLL已經被載入對應的調試符號文件,您可以在模塊窗口中檢查

消息5:調試器可能沒有被安裝(The debugger is not properly installed)

如果遇到這樣的問題,檢查控制檯應用程序項目中的調試功能,如果控制檯應用程序項目中顯示圖示的錯誤信息的話,說明您的.net framework並沒有被完全的安裝

您需要執行命令"regsvr32 mscordbi.dll"手動註冊您的"mscordbi.dll"文件

消息6:服務器不支持asp.net 或 ATL server 應用程序調試

如果你正使用WindowsXP Pro或是Win2000 Pro的話,您可能要思考一下您安裝VS.Net的順序問題;您如果在安裝Vs.Net之後才安裝IIS的話,你就會遇到這個錯誤,在這種情況下,您需要使用命令"aspnet_regiis.exe –i"來註冊"aspnet_isapi.dll"

消息7:訪問被拒絕。檢查您是否是系統管理員或...組的成員(Access is denied. Verify that you are an administrator or a member of ...)

您的帳戶可能不是本機Debugger Users組的成員,將您的帳戶加入該組可以解決這個問題;

消息8:無法啓動ASP.NET或ATL Server調試

原因1:您可能安裝了IIS Lockdown,如果是這樣的話,找到urlscan.ini文件,在[allowverbs]節中加入DEBUG(大小寫敏感)字段

原因2:如果您正使用域控制器(Domain controller)作爲您的服務器,並且您的項目使用了機器器名而沒有使用完整的域名的話,您肯能需要改變您項目的Url爲使用完整的域名

原因3:如果您的IIS被設置爲使用專用的IP作爲Web站點的定位標誌(Web site identification)的話,你肯那個就會遇到這個錯誤;在這種情況下,您需要改變您的項目名字爲直接使用IP地址作爲項目名。對於已經存在的項目,你需要編輯.sln文件和.webinfo文件來改變項目的名字爲IP地址

原因4:web.config文件中的值太大。缺省單位是Kbyte,不是byte,所以如果您使用了錯誤的單位來改變這個數值的話,可能會導致調試錯誤!

消息9:訪問被拒絕

原因:您可能是Debugger Users組中的成員,但是你沒有調試aspnet工作進程的權限,因爲您並不是aspnet用戶帳戶或Administrator組中的成員。將您的用戶帳戶加入到機器的Administrator組中以解決該問題。

無法對於一個Included File進行調試

ASPX中,您無法調試一個included file,一個included fie通常是您從asp項目轉向ASPX的結果,如果您使用包含文件,您可能不能正確的調試那個包含文件,您需要使用來代替。

在改變了您的密碼時,您需要爲使用ASP.NET調試進行log off/log in

在安裝了Win2000 SP4後,ASP.NET調試無法工作,報錯:"訪問被拒絕"

解決辦法是使用命令"regsvr32 –i aspnet_isap.dll"重新註冊aspnet_isapi.dll

只能在頁面第一次被加載的時候停在斷點處(hit breakpoint)

對於這個問題可能有幾種不同的原因,但是最有可能的原因應該是您在web.config文件中使用了page cache選項;如果您在web.config中看到了如的配置,您需要設置value爲False來關閉Web頁面緩存,在改變該設置之後,您應該就可以停在斷點處了;

您需要共享一個Web服務器來進行調試,但是又不想其他用戶能夠在該機器上進行管理

在VS.Net中,有兩件事情決定是否一個用戶可以進行調試,一是Debugger Users組,令一個是用戶權限,如administrator,power user 或者 SEDebug

Debugger Users組決定是否用戶可以訪問VS調試模塊(主要是MDM-Machine Debug Manager,VS的一個部分),所以作爲該組成員意味着您獲得了訪問MDM的權限,所以您可以調試您的開放進程(open process)並且可以看到您機器上的進程列表.

但在這之後,您是否可以調試其他用戶的進程就決定於您的權限,舉例說明:如果您想要調試其他用戶的自然進程(native process),您就需要具有SEDebug權限。對於其他用戶的託管進程(Managed Process),您需要是該機器的管理員!

由於這樣的約束,在這樣的情況下,學生們就必須被提升爲管理員,如果不這樣做的話ASP.NET工作進程在缺省情況下就無法被調試。

常規調試(General Debugging)

這些情況是基於控制檯應用程序類型的

消息1:無法啓動調試

這個問題時因爲沒有正確註冊mscordbi.dll造成的,重新註冊文件就可以解決這個問題

消息2:無法啓動調試,訪問被拒絕

確保Machine Debugger Manager服務被正確啓動,並且您是Debugger Users組中的一員,或是administrator

我可以啓動託管調試(Managed debugging),但是PDB並沒被加載,所以我無法設置任何斷點

如果調試器被正確運行,但是您並沒有停在任何斷點的話,您可能需要檢查diasymreader.dll的安裝情況,這個文件可能沒有被註冊,您需要這樣做:

regsvr32 /diasymreader.dll

託管調試無法工作

您使用CLR模式附加到一個自然進程在該進程還沒有創建一個CLR對象時,託管調試就無法工作

解決1:在CLR代碼已經被該進程使用後再附加到該進程

解決2:使用InterOp模式附加到該進程,在這種情況下,您不需要在CLR代碼被調用以後再附加到該進程

託管調試器無響應

當您針對託管代碼啓動調試時,調試器無響應

解決:確認 .NET Framework Support 服務被停止並且禁用(僅停止該服務是不夠的)

如果您並沒有.NET Framework Support 在運行的話,禁止IIS admin服務

對C# 代碼使用 Stepping 結果並不正確

看看以下代碼:

string someStr;

someStr = "SomeValue";

if(someStr == null)

Console.WriteLine("what's up?");

try

{

}

catch(Exception e)

{

}

如果您對這段代碼使用Step的話,您會發現當您進入"if"語句的時候,指令指針(instruction pointer)會移動到Console.WriteLine("what's up?");這句

這並不是調試器的bug,但是這是針對try catch塊調試信息的一支問題。看看以下該例子的反編譯代碼:

if(someStr == null)

0000002a cmp dword ptr [ebp-18h],0

0000002e jne 0000003C

Console.WriteLine("what's up?");

00000030 mov ecx,dword ptr ds:[01C50070h]

00000036 call dword ptr ds:[02F0257Ch]

0000003c jmp 00000048

catch(Exception e)

0000003e mov dword ptr [ebp-1Ch],eax

00000041 call 762C0846

00000046 jmp 00000048

}

00000048 nop

當value並不爲真的時候指令指針移動到了0000003c jmp 00000048這一行,但是這行錯誤的對應了if語句的語句塊。所以當執行結果正確時,我們看到的調試過程並不正確!



因果調試:在Web Service 客戶端和Web Service之間進行步進(Stepping)

無法從Web Service客戶端進入Web Service進行調試

缺省設置下並不允許您從Web Service客戶端進入Web Service。

ASPNET工作進程在"aspnet"或"network service"用戶帳戶下工作,這些帳號並不具有通過DCOM訪問MDM的權限。所以,您需要把這些帳戶增加進Debugger Users組中

在允許扮演Web Service(impersonation of Web service)之後,您無法做到因果步進

您需要做以下的事情來糾正客戶端與服務之間的步進

1.關閉IIS的匿名訪問

2.改變客戶端代碼,設置一個安全證書(credential)給WebService

Service1 obj = new Service1();

obj.Credentials = System.Net.CredentialCache.DefaultCredentials;

調試器掛起

如果您的Web Service客戶端代碼運行在一個STA(Single Thread Apartment)模型下,並且它正

在等待一個異步調用的完成,如下代碼所示:

Single Thread Apartment

Service1 obj = new Service1();

System.IAsyncResult ar = obj.BeginHelloWorld(new System.AsyncCallback

(Class1.Handle),obj);

while(ar.IsCompleted != true)

{

System.Threading.Thread.Sleep(1000);

}

那調試器就會掛起。導致這種掛起的原因是因爲一個調試器組件被在這個調試中的您的代碼鎖定了,解決方案1就是改變您的代碼使用事件進行線程同步或是使用mutext.其他的解決方案就是註銷csm.dll.第二種解決方案就是禁用因果調試。你可能需要手動附加到aspnet_wp.exe來調試Web Service

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章