將 Visual Studio .NET 調試器用於 ASP.NET 應用程式

來源:互聯網
上載者:User

摘要:因為帳戶的配置和相互作用可以在多個不同步驟中引起中斷,所以調試 ASP.NET 可能是件棘手的事情。本文概括論述與調試 ASP.NET 應用程式相關的常見問題,列舉錯誤樣本並解釋如何解決這些問題。

本頁內容
簡介
ASP.NET調試。
常規調試
因果性調試:Web 服務用戶端和 Web 服務之間的步驟
遠端偵錯

簡介

在過去的幾個月中,我曾與許多存在調試問題的使用者一起工作,他們之中有一部分來自 Microsoft 內部。我發現,如果使用者能得到正確的診斷,則很多常見的錯誤和問題便迎刃而解。因此,我寫了這篇文章,旨在向使用者提供在使用調試器時能協助他們解決問題的資訊。

本文檔包含:

錯誤訊息對話方塊或錯誤情況描述

上述錯誤的原因。

上述問題的解決方案。

在此,我對 VCS 調試器團隊和協助我完成本文及向我提供精彩反饋的人士表示感謝。

ASP.NET調試。

如果在本部分中找不到需要的錯誤訊息,請查看處理常規調試問題部分或處理遠端偵錯問題部分。

訊息:無法在 Web 伺服器中啟動調試。

1. 無法啟動調試錯誤訊息

 

原因 1未將 IIS 應用程式配置為使用 Integrated Windows Authentication。確保已選中“Authentication Method”對話方塊中的 Integrated Windows Authentication 複選框, 2 所示。

2. 啟用整合身分識別驗證

 

原因 2檢查 IIS 的 Enable HTTP Keep Alive 選項。如果它是關閉的,則可能需要將其開啟,再嘗試調試。

訊息:您沒有調試伺服器的許可權。

3. 無調試許可權

 

原因 1確保已啟用 Integrated Windows Authentication。可能的原因是僅為 IIS 的 Directory 安全啟用了 Basic authentication

原因 2如果您在使用 Integrated Windows Authentication,則需要確保您的使用者帳戶能夠完全控制 IIS 的目錄。

原因 3如果使用完整的機器名(如 machinename.domainname.something)建立 Web 項目,則該 Web 網站會被識別為 網際網路網站。因此,Internet Explorer 的預設設定將對登入行為產生影響。在這種情況下,您需要使用當前帳戶在具有 IE 設定的“Internet”地區啟用登入。

然而,這不是 Internet Explorer 的預設設定,因此最好僅使用機器名來建立項目,將圖 4 用作 Security Settings 的指南。

4. 設定 Internet Explorer 身分識別驗證

 

訊息:發送調試 HTTP 請求時發生伺服器端錯誤。

5. 調試期間的伺服器端錯誤

 

原因 1Web 應用程式沒有應用程式名稱。為此,請使用 IIS MMC 來檢查 Web 項目的屬性,確保 Web 項目具有應用程式名稱。當圖 6 中的紅色輪廓出現時,應該出現應用程式名稱。

6. 設定應用程式名稱

 

原因 2如果使用的是 NTFS 檔案格式,則確保“aspnet”具有“wwwroot”或虛擬目錄檔案夾上的適當許可權,才能訪問和寫入這些檔案夾。

訊息:沒有對項目進行配置以接受調試。

7. 未針對調試設定項目

 

如果出現這一錯誤訊息,則需要針對調試配置 Web。為此,需要在 web.config 檔案中設定 debug = true。此檔案位於 Web 專案檔夾中。

您可以啟動調試,同時不出現錯誤訊息,但是不能到達斷點。

您使用 F5 鍵啟動了調試,看起來好像正確啟動了調試並且也正確啟動了 Internet Explorer,但是您不能到達程式碼後置的代碼中的斷點。

原因 1 在項目屬性中未啟用 Asp.net 調試。按照圖 8 所示將該項設定為 True。

8. 啟用 ASP.NET 調試

 

在 VB 項目中,UI 有所不同,但可以輕鬆地識別等效項。

原因 2請確保使用匹配的偵錯符號檔案載入期望的 DLL。可以使用 Modules 視窗來檢查這一點。

訊息:未正確安裝調試器。

9. 未正確安裝調試器

 

如果看到這一問題,請在 Console Application 項目中檢查調試功能。如果控制台應用程式項目顯示 10 所示的錯誤訊息,則表示未正確安裝 .NET Framework 應用程式。

10. 無法啟動調試

 

需要通過執行“regsvr32 mscordbi.dll”來手動註冊“mscordbi.dll”。

訊息:伺服器不支援對 ASP.NET ATL 伺服器應用程式的調試。

11. 無法啟動調試

 

如果您在機器上安裝了 Windows XP Pro 或 Windows 2000 Pro,則可能需要考慮 Visual Studio 7 和 IIS 之間的安裝順序。如果在 Visual Studio 7 之後安裝 IIS,則會發生這一錯誤。在這種情況下,請使用“aspnet_regiis.exe –i”註冊“aspnet_isapi.dll”。

訊息:訪問被拒絕。檢驗您是否是管理員或某個群組成員。

12. 訪問被拒絕

 

您可能不是該電腦上 Debugger Users 組的成員。將您的使用者帳戶添加到電腦上的 Debugger Users 組中即可解決此錯誤。

要將您的使用者帳戶添加到 Debugger Users 組中,需要執行以下操作:

1.

作為 Administrator 登入。

2.

運行 Administrator tools 中的 Computer management

3.

選擇 Local users and groups\groups 節點。

4.

雙擊右邊窗格中的 Debugger Users 組。

5.

單擊 Debugger users properties 對話方塊中的 Add 按鈕。

6.

鍵入使用者帳戶並單擊 OK

訊息:無法啟動 ASP.NET ATL 伺服器調試。

13. 未安裝ASP.NET ATL

 

原因 1您可能安裝了 IIS Lockdown 工具。如果這樣,則尋找 urlscan.ini 檔案,並將 DEBUG(區分大小寫)添加到 [allowverbs] 部分中。

原因 2如果將網域控制站用作伺服器,並且項目是使用機器名(非完整網域名稱)建立的,則可能需要將項目的 URL 更改為完整網域名稱。

原因 3如果將 IIS 設定為使用專用 IP(例如 Web site identification,可以在 IIS MMC 的 IIS 設定中找到這一選項),則可能看到這條錯誤訊息。在這種情況下,需要更改項目名,直接使用 IP 位址。對於現有項目,需要更改項目以使用 IP 位址,而不用通過編輯 .sln 檔案和 .webinfo 檔案使用機器名。

原因 4web.config 檔案的 中的值太大。預設單位是KB而非位元組,因此如果更改此數字,使用了錯誤的單位,則可能導致調試問題。

訊息:訪問被拒絕。

14. 訪問被拒絕

 

原因:您可能是 Debugger Users 組的成員,但是您不具有調試 aspnet 輔助進程的許可權,因為您不是 aspnet 使用者帳戶或 Administrators 組的成員。將您的使用者帳戶添加到機器上的 Administrators 組即可解決此問題。

無法使用包括檔案進行調試

在 ASPX 中,無法使用包括檔案進行調試。將舊的 ASP 項目轉換為 ASPX 時,往往產生包括檔案。

如果通過 包括檔案,則可能無法正確調試該包括檔案。您需要使用 來代替。

更改密碼後,需要登出/登入才能進行 ASP.NET 調試。

更改密碼後,需要登出,然後再登入才能正確進行 ASP.NET 調試。

安裝 Windows2000 SP4 後,ASP.NET 調試不能運行,同時顯示訊息訪問被拒絕

此問題的解決方案是,使用 regsvr32 –i aspnet_isap.dll 重新註冊 aspnet_isap.dll

僅在首次載入頁面時遇到斷點。

針對這一特定問題,可能存在多種原因,但是最大的可能性是您在 web.config 檔案中設定了頁面緩衝選項。

如果在 web.config 中看到類似於 的內容,則需要將值設定為“False”,以關閉 Web 頁面緩衝。更改該設定並重新整理頁面後,可能遇到斷點。

您需要共用 Web 伺服器以進行調試,但是不想讓其他使用者成為電腦系統管理員。

在 Visual Studio .NET 中,以下二者可以確定使用者是否可以進行調試。其中之一是 Debugger Users 組,另一個是使用者權限,如管理員、Power User 或 SEDebug。

Debugger Users 組確定使用者是否可以訪問 VS 調試組件(主要是 MDM-Machine Debug Manager,Visual Studio 的一部分),所以成為該組的成員意味著保證可以訪問 MDM。因此在這一點上,您可以調試開放進程並查看機器上的進程列表。

不過在此之後,您是否可以調試其他使用者的進程取決於您的許可權。例如,如果您想調試別人的本地進程,則需要具有 SEDebug 許可權.針對其他使用者的主控處理序,您應該是該機器上的管理員,才有權進行調試。

因為存在這一限制,所以在您的方案中,應該授予學生管理員權限。否則,預設情況下無法對 ASP.NET 輔助進程進行調試。

我們有一種變通方法。Cassini 是一個獨立的小型 ASP.NET 伺服器。對學生來說,他們可以使用 Cassini 進行開發,稍後將開發結果部署到實際伺服器上來提交結果。Cassini 位於

常規調試

這些案例基於 Console application 項目類型。

訊息:無法啟動調試。

15. 無法啟動程式

 

導致圖 15 中所示問題的原因是沒有正確註冊 mscordbi.dll。此問題的補救辦法是手動註冊該檔案。

訊息:無法啟動調試。訪問被拒絕。

16. 拒絕訪問錯誤訊息

 

確保正確啟動 Machine Debugger Manager 服務,並且確保您是 Debugger UsersAdministrators 的成員。

我可以啟動託管調試,但是 PDB 不載入,並且不能遇到任何斷點。

如果正確啟動了調試器,但不能遇到任何斷點,則您可能需要檢查 diasymreader.dll 的安裝。可能沒有註冊該檔案。要註冊該檔案,需要執行以下操作:

regsvr32 \diasymreader.dll

託管調試不運行

在進程建立 CLR 對象前,以 CLR 模式串連本地進程。託管調試不運行。

解決方案 1在進程中使用了 CLR 代碼後再串連進程。

解決方案 2以 InterOp 模式串連進程。在這種情況下,不必在調用 CLR 代碼之後再串連進程。

託管調試器不響應

使用Managed 程式碼啟動調試時,調試器不響應。

解決方案:確保已停止並禁用 .NET FrameworkSupport 服務(僅停止該服務還不夠)。

如果沒有運行 .NET FrameworkSupport 服務,則禁用 IIS admin 服務。

使用 C# 代碼單步調試不正確

考慮以下代碼:

string someStr;someStr = "SomeValue";if(someStr == null)Console.WriteLine("what's up?");try{}catch(Exception e){}

如果使用此代碼,則會看到遇到“if”語句時,指令指標將移動到“if”語句體 (Console.WriteLine("what's up?");)。

這不是一個調試器 bug,而是一個眾所周知的 try catch 塊調試資訊問題。請參見以下調試器中 try catch 塊樣本的反組譯碼代碼。

if(someStr == null)a cmp        dword ptr [ebp-18h],0e jne        CConsole.WriteLine("what's up?");mov        ecx,dword ptr ds:[01C50070h]call       dword ptr ds:[02F0257Ch]c jmpcatch(Exception e)e mov        dword ptr [ebp-1Ch],eaxcall       C0846jmp}nop

值沒有匹配時,指令指標移動到 0000003c jmp 行,但是該行已經錯誤地與“if”語句體相匹配。當代碼功能正確時,顯示就不正確了。

返回頁首

因果性調試:Web 服務用戶端和 Web 服務之間的步驟

無法從 Web 服務用戶端到 Web 服務設定調試

預設設定不允許從 Web 服務用戶端進入 Web 服務。它的運行方式類似 step-over。

ASPNET 輔助進程(aspnet_wp.exe 或 w3wp.exe)在“aspnet”或“network service”使用者帳戶之下運行,而這些帳戶沒有通過 DCOM 訪問 MDM 的許可權。因此,需要將這些帳戶添加到 Debugger Users 組中。

啟用 Web 服務類比後,無法再使用因果性步驟。

使用“web.config”為 Web 服務啟用類比時,不能從 Web 服務用戶端代碼進入 Web 服務代碼。因為,它的運行方式類似於 step over。

您需要執行以下操作來更正用戶端和服務之間的步驟。

關閉 IIS 中的 Anonymous access

更改用戶端代碼,將憑據設定為 Web 服務,如下所示:

Service1 obj = new Service1();

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

在此之後,您將能夠從用戶端進入 Web 服務。

這些操作是必需的,因為當您進入 Web 服務時,某些 .NET Framework 組件需要使用系統級調試器組件 (MDM) 來共同建立它。如果不能提供正確的憑據,則此步驟將失敗。如果沒有這些正確的憑據,“step into”的運行將類似於“step over”。

調試器掛起

如果 Web 服務用戶端代碼在 STA (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 是更改代碼以使用與事件或 mutex 同步的線程。另一個解決方案是登出 csm.dll。第二個解決方案禁用 causality 步驟(從 Web 服務用戶端代碼到 Web 服務方法的步驟)。您可能需要手動串連 aspnet_wp.exe 才能調試 Web 服務。

遠端偵錯

無法查看遠程機器上的任何進程

確保在遠程機器上安裝了 Remote full debug 設定,並且您是 Debugger Users 組的成員。

RPC 問題而無法串連到遠程機器

以下資訊摘自 Mike Clay 撰寫的 KB 文章。

如果通過“Processes”對話方塊串連到遠程機器上時看到以下錯誤訊息:

Error while trying to run project: Unable to start debugging on theweb server. Not enough storage is available to complete this operation.

或者在進行 ASP.NET 調試期間看到這一訊息:

Error while trying to run project: Unable to start debugging on the webserver. Unable to map the debug start page URL to a machine name.

則確保 RPC 在您的機器與遠程機器之間正確運行。下面的行為可能導致 RPC 問題:

通過防火牆進行調試。Microsoft 不建議或支援通過防火牆的遠程 ASP.NET 調試。解決此問題最好的方式是,使用“終端服務”登入遠程伺服器並在本地進行調試。

RPC 的一種常見故障是無力解析遠程機器名。RPC 依靠名稱解析在電腦之間通訊。如果未能將遠程伺服器機器名解析為正確的 IP 位址,則可能發生錯誤。

RPC 通訊只能單向流動,另一個方向卻不行。RPC 通訊必須能夠從用於調試的機器到達遠程伺服器,並從遠程伺服器返回用於調試的機器,這樣才能成功進行遠端偵錯。確保以雙向方式啟用 RPC 通訊。

要分析 RPC,可以使用 RPCPing 工具。

遠端偵錯工作群組中的機器失敗

當您的兩台 Windows XP Pro 機器都不在域中但在工作群組中時,將發生這種情況。在它們之間進行遠端偵錯時,您根本無法訪問遠程機器。

在工作群組環境中,您需要確保兩台機器具有相同的使用者帳戶名和相同的密碼。否則,DCOM 進行身分識別驗證時將失敗。

另外,在 Windows XP Pro 上,將 Sharing and security model for local accounts 的預設安全設定設定為現在允許共用。下面是更改此設定的步驟:

1.

運行管理員工具中的 Local Security Settings

2.

選擇 Security settings\Local policies\Security 選項。

3.

Network access : Sharing and Security model for local accountsGuest only - local users authenticate as Guest 更改為 Classic - local users authenticate as themselves

4.

重新啟動電腦。

應該將此更改應用於進行遠端偵錯的兩台機器。

更改設定後,即可使用同一名稱的使用者帳戶在兩台機器上進行遠端偵錯。請確保每台機器上的使用者帳戶都具有密碼。在某些情況下,沒有實際密碼機器不能運行。

然而,因為更改了安全模型的預設設定,所以可能公開下面的內容:

意外的檔案分享權限設定

意外的 DCOM 組件共用。

在進行這一更改之前,從遠程機器到您的機器的任何種類的串連都是以 Guest 身份進行的;但更改後,他/她即可接受使用本機使用者帳戶的身分識別驗證。因此,在調試案例中,如果將一個檔案夾或 DCOM 物件共用出來,其他機器上的任何匹配使用者(具有相同使用者名稱和相同密碼)都可能可以訪問您的共用對象。

我極力建議,如果您要使用這一變通方法,則請確保所有使用者帳戶都具有強密碼,否則應該設定一個網路孤島來調試機器,以防止惡意攻擊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.