文章目錄
無法輸出訊息至 Visual Studio Output Window (輸出視窗)
同事想要 debug 某段程式碼,但不想中斷程式碼執行,並打算在執行過程中紀錄各個 method 實際執行的時間點。要符合同事的需求可以使用 log ,但如果透過 System.Diagnostics.Debug
或是 System.Diagnostics.Trace
來執行更簡單一點,不用安裝 log 套件也不需要設定
但同事使用上卻總是無法成功顯示 log 資訊,協助 debug 順手紀錄一下
關於 Debug
與 Trace
相同處
- 皆位於
System.Diagnostics
命名空間下 有相同方法
- WriteLine
- WriteLineIf
- Indent
- Unindent
- Assert
- Flush
Debug Solution Configuration 時皆會輸出訊息
內容會輸出至 Visual Studio Output Windows 的 Debug 視窗中
可以透過新增 Listener 將訊息寫至其他目標
- Console
- 檔案
- nlog
- …..其他
Listener 是共用的
無論新增 Listener 至
Debug
orTrace
,還是都會蒐集Debug
與Trace
訊息
- 皆位於
相異處
Release Solution Configuration 下,預設只有
Trace
內容會被輸出可以透過 project properties 來修改
如何使用?
加入引用
using System.Diagnostics;
加上所需 log
Debug
Debug.WriteLine("Test");
Trace
Trace.WriteLine("Test");
檢查相關設定
檢查訊息是輸出至 Output 視窗還是即時運算視窗
Visual Studio 主選單 Tools –> Options…
Debugging –> Redirect all output window text to the immediate window
- 想要在 Output 視窗看到訊息,請保持未選取的狀態
檢查專案設定
專案 上按右鍵 –> Properties
選擇所需 Configuration –>
Build
tab –> 確認 “Define DEBUG constant” 及 “Define TRACE constant” 狀態預設 Debug configuariton :”Define DEBUG constant” 及 “Define TRACE constant” 都會勾選
才可以使用
Debug
與Trace
輸出訊息預設 Realease configuariton :只有 “Define TRACE constant” 勾選
才可以使用
Trace
輸出訊息
檢查 Output 視窗設定
Output 視窗 –> Show output from:Debug
Output 視窗空白處按右鍵 –> 勾選
Program output
預設所有選項都已勾選
其他原因?
經過一番檢查確認後,同事還是無法正確地輸出訊息到 output 視窗,後來看到 web.config 有用了 NLogTraceListener,猜測可能是 nlog 的設定問題,檢查 web.config
原始 web.config
<system.diagnostics> <sharedListeners> <add name="nlog" type="NLog.NLogTraceListener, NLog" /> </sharedListeners> <trace autoflush="true"> <listeners> <add name="nlog" /> <remove name="Default" /> </listeners> </trace> </system.diagnostics>
需要移除
<remove name="Default" />
這行設定將原本會將訊息輸出至 output 的行為移除了
<system.diagnostics> <sharedListeners> <add name="nlog" type="NLog.NLogTraceListener, NLog" /> </sharedListeners> <trace autoflush="true"> <listeners> <add name="nlog" /> </listeners> </trace> </system.diagnostics>
心得
這次除錯最大的心得就是團隊應該使用團隊成員有共識的專案設定及套件,避免其他同事接手時,為了小問題需要額外花費很多時間
參考資訊
文章作者 Yowko Tsai
上次更新 2021-10-14
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。