在WPF裡如何使用Debug.WriteLine
很早以前我就知道有Debug.WriteLine方法來幫助偵錯這種東西了,
但最近要偵錯時卻卡卡使不出來,來看怎麼回事。
於WPF專案撰寫如下程式
using System.Windows;
using System.Diagnostics;
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Debug.WriteLine("測試Debug.WriteLine");
}
}
}
你會發現在F5執行後於Output視窗就可以看到自己所寫的Debug訊息,
但為什麼實際用起來會卡卡的呢?因為實際專案在跑的時候
Output視窗可不只會顯示你所寫的Debug訊息,
含包含其他方法執行訊息,所以你的Debug訊息有跑出來時將很快被洗掉,
這也就是用起來為什麼會卡卡的了。
補充:
Debug 類別與Trace 類別,這兩個類別的用法都一樣,只是差在當Debug模式時,
Debug與Trace類別都會執行,在Release模式下時只會執行Trace類別。
所以說還是最好把我的Debug訊息寫入檔案之後好方便調出來看比較好。
如下範例
using System.Windows;
using System.Diagnostics;
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
TextWriterTraceListener _DebugLog = new TextWriterTraceListener(System.IO.File.CreateText("Debug_Output.txt"));
Debug.Listeners.Add(_DebugLog);
Debug.AutoFlush = true;//表示每次寫入後是否要在Listeners上呼叫Flush,存入檔案。
Debug.WriteLine("使用TextWriterTraceListener");
}
}
}
結果就可以成功輸出至檔案了。
以往在寫程式時都會使用MessageBox.Show();來輔助偵錯,
但在release時,則還要注意是否MessageBox.Show();要不要註解而花時間,
提供另外一個方法使用Debug.Assert方法,用法與結果畫面如下,
Debug.Assert(false, "錯誤", "詳細錯誤訊息");
它可以在release的時候被忽略,而在debug的時候幫你判斷要不要跳出訊息,
基本上可以取代MessageBox.Show();來做偵錯。
參考資料: