2011-10-05 62 views
9

我在C#中的ASP.NET應用程序中有一些代碼,它位於Global.asax.cs代碼文件中。在Application_StartSession_StartApplication_Begin Request我已經設置了一些斷點。然而這些都沒有被擊中。我正在使用VS8在本地機器上工作。global.asax斷點未命中

這是我已經試過:

  • 停止ASP開發服務器
  • 刪除所有ASP.NET臨時文件
  • 創建新Global.asax
  • 關閉VS開放備份
  • Clean and Rebuild project

在嘗試完這些之後,斷點不會被擊中。

任何想法,爲什麼這可能是?

+0

你爲什麼不嘗試把一些System.Diagnostics.Debug.WriteLine(...);在每個這些事件中檢查輸出窗口,同時從Visual Studio運行解決方案?你看到什麼了嗎? –

+2

請參閱[這個答案](http://stackoverflow.com/questions/1960651/it-is-possible-to-debug-global-asax/4809464#4809464) - 它對你的情況有幫助嗎? –

+0

你能否粘貼這些方法的實際聲明?也許你已經錯誤地宣佈了他們。 –

回答

24

我遇到了同樣的問題。我假設你使用本地IIS而不是VS開發服務器。如果是這種情況,您將無法在Global.asax.cs文件中調試/逐句通過此代碼,因爲在調試器附加時,此代碼已在IIS中執行。但是,如果您使用Dev服務器,則您有能力獲取此代碼,因爲調試器已經連接。

因此,更改項目屬性中的服務器以使用Visual Studio Development Server。

這可以通過在Visual Studio中右鍵單擊您的項目>Project Properties>Web tab>Use Visual Studio Development Server找到。

+0

這對我很好。應該是被接受的答案 – Kevin

+4

在VS 2013 Visual Studio開發服務器缺失的情況下,@Ofiris的答案也沒有幫助 –

4

什麼幫助我是添加:

System.Diagnostics.Debugger.Break();Application_Start()方法。

+0

Got AppPool錯誤。 – QMaster

2

一個項目我工作,在「啓動外部程序」選項,在該選項卡中選擇:

的Visual Studio>項目屬性>網絡

這是造成斷點不被擊中。

將「開始操作」更改爲「當前頁面」爲我解決了這個問題。

0

正如在另一個答案中提到的,Global.asax代碼將在調試器獲得附加機會之前運行。爲了解決這個問題,你可以開始調試,然後進入IIS並停止/啓動應用程序,然後讓調試器重新啓動。

0

我有兩次這個問題。第一個項目發生在我身上,我去了Project Properties-> Build-> Advanced ...並從Debug Info下拉菜單中選擇了「full」。

第二次,我的global.asax中的斷點沒有被擊中,但是如果我在斷點處盤旋,它會發出警告:「源代碼與原始版本不同。「

我終於明白,在這種情況下,我做了這個項目的備份副本,以保留代碼並正在處理副本。即使它位於不同的文件夾中,它仍然使用dll原來的虛擬目錄:http://localhost:4952/

所以我改變了在項目屬性 - >基於Web>項目URL我只是改變了口http://localhost:49523/和它的工作

這促使我創建虛擬目錄。 ,我說是的,並沒有任何與斷點有關的問題。

1

如果y OU不想使用Visual Studio開發服務器,並使用IIS,你可以處於運行狀態以下(在VS2015專業測試)

1)應用程序池 - 確保使用的應用程序池是通過訪問運行來自您的Web應用程序的頁面(可能會由於空閒超時而停止)。

2)附加到流程 - Ctrl-Alt-PDebug -> Attach to Process - >查找與您的應用程序相對應的w3wp進程。

使用ReAttach extension可以大大加快附加到進程,該進程可以創建最近附加進程的快捷方式。

3)應用程序池回收 - 確保應用程序池通過輸入IIS回收和循環使用,甚至更快,通過輸入web.config文件,使無效果的變化(放的標籤一些空白外)並保存它

4)開始調試 - 對Web應用程序中的任何頁面執行一個請求,以強制其初始化。你應該能夠把和命中斷點從任何的啓動方法在Global.asax

protected void Application_Start() 
void Application_BeginRequest(Object sender, EventArgs e) 
protected void Session_Start(object sender, EventArgs e) 
+0

不完美但有用:輸入web.config,進行無效更改(在標記之外放置一些空白)並保存。當之無愧+1 :) – QMaster