2009-12-25 103 views

回答

5

也許你應該嘗試:

  • 停止開發服務器在任務欄中
  • 從釋放開關配置調試
+5

奇數,這被標記爲答案,但有-2評級... – 2010-07-20 20:59:53

+0

它有一個負評分,因爲它是錯誤的。說你需要進行調試(或者你沒有pdb文件)並且你需要在服務器啓動時捕獲服務器是正確的(因爲這是在代碼運行的時候),但是你不能附加到過程。你需要一個正在運行的進程來連接調試器,global.asax代碼在啓動的前幾個毫秒內運行,所以它幾乎是不可能的(沒有使用[正確答案])(https://stackoverflow.com/a/ 4809464/542251))附加到該過程,因爲它運行此代碼 – Liam 2018-02-28 11:53:24

5

是的,這是正常的。

Application_Start()由IIS處理。

但是所有其他方法,例如Session_Start以及除Application_Start()之外的所有其他方法都可以正常調試。

9

Application_Start()每個AppDomain被調用一次。如果你不打你的斷點,這意味着已經創建的AppDomain,所以做到以下幾點:

  • 在你的快速啓動欄,沒有爲VS Web服務器的圖標(其在其中一個說: 「本地主機某個端口」)。右鍵單擊並選擇「停止」或「關閉」。這應該殺死AppDomain。
    • 如果您使用的是IIS,則需要手動重新啓動您的站點。
    • 或者,修改web config或Global.asax文件通常足以重新啓動AppDomain。
  • 重新啓動您的調試,您應該現在打你的斷點。
7

檢查你的web應用程序是在調試模式(<compilation debug="true">在web.config中)。

如果您使用由VS啓動的開發人員的IIS,只需重新啓動它或重建應用程序即可。

如果你在正常的IIS,你有兩個選擇:

  1. 對於Web站點配置了發展的文件夾(你VS網絡部署項目)的工作,你只需要重新啓動應用程序池集對於該網站並在第一次請求到達服務器之前開始調試(您可以在調試過程中始終重新啓動應用程序池)。
  2. 對於在另一個文件夾甚至遠程服務器上工作的網站,您必須附加到該過程。要做到這一點,您需要遠程調試器安裝在遠程機器上或您自己的(取決於Web服務器位置),並使用Debug - Attach to process菜單,輸入計算機名稱,然後選擇要調試的進程。它通常是以受管模式類型工作的w3wp.exe。
+0

感謝您的答案。我通過VS使用IIS。 – mahdiahmadirad 2009-12-25 19:47:34

82

打破Application_Start()的一個簡單方法是使用System.Diagnostics.Debugger類。您可以通過插入System.Diagnostics.Debugger.Break()來強制應用程序中斷,您希望調試器中斷。

void Application_Start(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debugger.Break(); 

    // ... 
} 
2

刪除global.asax並添加一個新的。在我的解決方案中,有一個global.asax和一個global.asax.cs

所有方法(Session_Start,Application_Start,...)都在bot文件中,但只有global.asax中的方法已經被考慮。所以,cs中的斷點和代碼不會做任何事情。
只有在重新創建文件後,纔有適當的方法並且運行。

+0

我遵循這裏的說明:http://rossnelson.blogspot.ca/2005/11/fixing-globalasax-in-aspnet-20.html。 基本上,刪除global.asax並添加一個全局應用程序類,它可以用一個代碼在文件後面重新創建asax,然後我可以進入該文件。我在IIS上運行,它工作正常。 – cbeuker 2012-08-28 18:01:14

53
  1. 將調試器附加到IIS進程。
  2. 打開global.asax文件並放入一個斷點。
  3. 給web.config文件添加一個空格並保存文件(這會導致當前的Web應用程序重置);
  4. 刷新/轉到網站上的網頁。
  5. 當調試器停在你的斷點處時驚奇地看着。 :)
+1

這也被稱爲'觸摸web.config',可用於多種場景,當您需要刷新您的網站而不接觸IIS時。我不相信它不會發生在我身上。謝謝。 – HockeyJ 2012-10-09 08:16:51

+0

我希望它那麼簡單。但對我? 「電腦說不」 – Justin 2015-08-07 01:10:16

3

另一種方法來接受System.Diagnostics.Debugger.Break();

void Application_Start(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debugger.Launch(); 
    //... 
} 

不應破壞代碼,並應甚至開始調試如果服務開始與不同的權限。

+0

這很好我試過了,它也適用於我...謝謝 – 2015-10-16 16:42:35

0

不要指望通過按f5立即調用Application_Start()函數。 Application_Start()僅在第一次請求應用程序時被調用。 奇怪而真實。

0

如果所有的答案不工作的,請嘗試:

<compilation debug="true" ... /> 
web.config

。 ;)

相關問題