asp.net調試器出現的問題及相關解決方案

來源:互聯網
上載者:User

訊息1:無法在伺服器上啟動調試(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檔案中的<httpRuntime maxRequestLength="#########" />值太大。預設單位是Kbyte,不是byte,所以如果您使用了錯誤的單位來改變這個數值的話,可能會導致調試錯誤!
訊息9:訪問被拒絕
 
原因:您可能是Debugger Users組中的成員,但是你沒有調試aspnet背景工作處理序的許可權,因為您並不是aspnet使用者帳戶或Administrator組中的成員。將您的使用者帳戶加入到機器的Administrator組中以解決該問題。

無法對於一個Included File進行調試
ASPX中,您無法調試一個included file,一個included fie通常是您從asp項目轉向ASPX的結果,如果您使用<!--#include file = "file name"-->包含檔案,您可能不能正確的調試那個包含檔案,您需要使用<!--#include virtual="file name"-->來代替。

在改變了您的密碼時,您需要為使用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中看到了如<add key="<your web project name".Web.EnablePageCache" value="True" />的配置,您需要設定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 <path to DLL>\diasymreader.dll
託管調試無法工作
您使用CLR模式附加到一個自然進程在該進程還沒有建立一個CLR對象時,託管調試就無法工作
解決1:在CLR代碼已經被該進程使用後再附加到該進程
解決2:使用InterOp模式附加到該進程,在這種情況下,您不需要在CLR代碼被調用以後再附加到該進程
託管調試器無響應
當您針對Managed 程式碼啟動調試時,調試器無響應
解決:確認 .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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.