跳到主要內容

Asp.Net Core Debug Source Code

寫過Asp.Net Core Web MVC應該知道裡面要使用很多的Middleware,如果要知道裡面的運作方式,就要看Source Code,或者想知道自己寫的程式哪裡出問題,有時候就必須Debug進Source Code中看變數的變化

如何Debug Source Code我是參考DEBUGGING ASP.NET CORE 2.0 SOURCE CODE這篇文章來設定的,作法如下:

1.點選[工具]的[選項] 

2.展開[偵錯]的[一般],並將[啟用Just My Code]的選取方塊取消,以及[啟用來源連接支援]的選取方塊點選起來 

3.接著點選[偵錯]的[符號],並將[Microsoft伺服器]的選取方塊點選起來 (點選之後會出現提示視窗,因為載入這些符號,會導致一些效能上的影響,尤其是首次載入,讓我以為Visual Studio當機了...)

這樣就可以Debug Source Code了,接著開始測試看看 :

1.先開啟一個新的專案(我選擇Asp.Net Core Web 應用程式)

2.因為只是測試所以都用預設的, 一直按確定就好, 除了Asp.Net Core 3.1改成5.0(操作方式都一樣沒差, 我只選5.0只是為了節省下載符號的時間以及空間而已,如果我選3.1它會下載這個版本的符號一次, 下次我選5.0它又會下載這個版本的符號一次)



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)


留言

這個網誌中的熱門文章

Excel C# (一) : 增益集 (Add-Ins) 之自訂函數

Excel的自訂函數除了之前介紹的VBA方式外, 還可以用 JavaScript, C# 等, 我就來試試看用C#來開發 我爬文找到了這篇 Excel-DNA 裡有詳細的教學, 不過我還是自己照做一遍看看是否成功 ! 第一步先開啟 Visual Studio 2019, 專案選擇 "類別庫(.NET Framework)" 過來將專案名稱輸入 MyExcelAddIns, 其他不變按下 "建立" 第二步接著在 "工具"->"NuGet 套件管理員"->"管理方案的 NuGet 套件", 將 Excel-DNA 套件加入至專案中 第三步將專案中的 Class1.cs 檔案刪除, 自己新增一個類別 "MyFunctions", 然後我複製 https://excel-dna.net 該網站上的範例, 貼進來方便測試 第四步我則是將方案組態由 "Debug" 改成 "Release"(如上圖的紅框), 再按 "建置" 下的 "重建方案" 產生 Excel XLL 檔案, 再去方案總管的 MyExcelAddIns 上按右鍵, 選擇 "在檔案總管中開啟資料夾" 會看到下面第二張圖 過來我的習慣是將這個 Release 目錄整個複製, 貼到桌面方便測試 ! 第五步則是開啟空白的Excel, 按 "程式開發人員" 下的 "Excel增益集", 點擊瀏覽後, 選擇桌面上我剛剛的 Release 資料夾, 如果Excel是32位元則選 MyExcelAddIns-AddIn.xll 檔案, 如果是64位元版本則選擇 MyExcelAddIns-AddIn64.xll 檔案, 接著在 Excel 任一儲存格輸入 =SayHello("World!"), 結果出現 Hello World!, 表示一切都正確, 接著我可以開始建立自己的函數了! 最後我個人認為自訂函數的VBA與C#兩種方式, 其優缺點如下:VBA的優點...

在 Windows 10 的 IIS 安裝 SSL for Free

為了讓我的 Windows 10 IIS 網站在全世界都能合法認證, 方便開發測試用, 我爬網了一下, 決定嘗試申請一個台灣人都能免費申請的 *.nctu.me 網域, 以及 SSL for Free 的免費 SSL 來測試第一步當然是將 Windows 10 的 IIS 安裝好, 起碼要在瀏覽器中輸入網址 localhost 看到本機網站的首頁, 才能知道 SSL 是否設定成功 第二步則是申請一個網域, 我是去台灣交通大學的 https://nctu.me 去申請的, 只要有台灣身分證的都能申請, 網站上也有詳細的註冊說明, 如下圖: 第三步則是申請一個公證機構的 SSL 認證, 我則是去 https://www.sslforfree.com 申請一個免費的 SSL 來測試用, 申請的步驟以及IIS設定, 我則主要是參考以下幾位的做法 https://ithelp.ithome.com.tw/articles/10222231 https://it-help.tips/iis-setup-ssl-certificate/ https://benit.pixnet.net/blog/post/61838887 最終我的步驟如下: (1) 先決定好要申請 SSL 的網址是甚麼, 假如我申請的交大網域名稱是 myname.nctu.me, 則我要申請的 SSL 網址可以是 https://www.myname.nctu.me 或是 https://myssl.myname.nctu.me 或是其他我喜歡的名字, 你可能會問如果我有很多個不是就要一個一個申請, 不能是 https://*.myname.nctu.me 嗎? 因為我申請的是免費的才會有這限制, 要錢的就不用這麼麻煩了! (2) 開啟 Windows 10 的電腦管理, 點擊IIS的伺服器憑證, 畫面如下 : (3) 點擊建立憑證要求, 畫面如下: (4) 輸入資料, 其中的一般名稱就是輸入之前我要SSL的網址, 其他我則隨便填, 畫面如下: (5) 過來加密長度選 2048, 如下圖: (6) 再來就是輸入憑證要求的檔案名稱, 我們可以將它儲存在 d:\myssl.txt 的檔案中(這檔案的內容是申請 SSL for Free 要用的), 如下圖 :...