寫過Asp.Net Core Web MVC應該知道裡面要使用很多的Middleware,如果要知道裡面的運作方式,就要看Source Code,或者想知道自己寫的程式哪裡出問題,有時候就必須Debug進Source Code中看變數的變化
如何Debug Source Code我是參考DEBUGGING ASP.NET CORE 2.0 SOURCE CODE這篇文章來設定的,作法如下:
1.點選[工具]的[選項]這樣就可以Debug Source Code了,接著開始測試看看 :
1.先開啟一個新的專案(我選擇Asp.Net Core Web 應用程式)3.專案自動建好後, 於視窗右邊的 HomeController.cs 按兩下, 視窗左邊就會看到檔案的內容, 接著找到 Index 的 rertrn View(), 在這列的前面點一下即可設定中斷點, 就像下圖的左邊紅色圈圈一樣(因為要顧到初學者所以才會說的這麼仔細)
4.設定好中斷點(紅色圈圈)之後, 過來就按下 [ IIS Express ] 的執行(上圖中中間上面的黃色圈起來的地方), 或者按下 F5, 就會開始執行程式
5.如果是第一次執行, 可能會出現一個確認視窗, 要你確認是否IIS Express的SSL憑證?按下是即可, 下面一個視窗也請按是
6.接著畫面會停止不動像當機一樣, 不是當機只是第一次抓符號要很久, 只要耐心等候直到 return View() 由紅底變成黃底就跑完了, 黃色底的列代表程式目前執行到這, 暫時不繼續執行, 如下圖
7.接著點擊右上部的堆疊框架(如上圖的紅色框起來的地方), 展開後會出現如下圖的畫面
裡面列出了從開始到中斷點之執行經過(越下面的越早執行), 就可以清楚地看到 DeveloperExceptionPageMiddleware, HttpsRedirectionMiddleware, StaticFileMiddleware, EndpointRoutingMiddleware, AuthorizationMiddleware, EndpointMiddleware 的執行順序, 剛好與 Startup.cs 檔案中所寫的程式碼順序一模一樣, 如下圖 :
8.如果我想看 UseHttpsRedirection 的程式碼, 就可以點一下[堆疊框架]中的 HttpsRedirectionMiddleware, 第一次的話會出現一個如下圖的視窗, 選擇 [下載程式檔並繼續偵錯], 就會自動下載並開啟 Source Code 視窗, 我就可以去看原始碼是如何寫這功能的, 是程式學習的很好工具
9.如果我想要在 Source Code 中逐步執行(F11), 就可以在剛剛的 HttpsRedirectionMiddleware.cs 中設定中斷點即可, 我的操作如下 :
9a.在 Invoke 副程式的第一列設中斷點(如下圖, 程式碼如果沒改變的話應該是83列)
9b.接著按下 Shift+F5 停止偵錯剛剛停掉的中斷點(return View()), 再重新按下 F5 執行, 程式就會停在 HttpsRedirectionMiddleware.cs 中我設的中斷點上了(如下圖)
9c.接著去看自動變數的視窗(如上圖左下角的紅色框區域)(通常我只看監看式視窗而已, 要看甚麼變數自己加), 如裡面有個 context 變數, 展開後有很多的資料, 了解一下對提升網站知識是很有幫助的, 展開後裡面的 context.Request.RouteValues 這個時候是沒資料的, 因為 RouteValues 要經過 EndpointRoutingMiddleware 才會出現, 也就是app.UseRouting()之後才會有資料, 在這之前的程式都不會有資料的, 這我怎麼知道的呢? 在EndpointRoutingMiddleware.cs上設中斷點, 去觀察RouteValues的變化就會知道它是在這裡出現資料的
10.從這個例子就知道 Startup.cs中的Configure程式碼的順序非常重要, 排錯了會出事情的
開發工具 : Visual Studio 2019 16.8.3版
專案 : Asp.Net Core Web 應用程式(MVC, .Net 5.0)
留言
張貼留言