在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();來做偵錯。

 

參考資料:

Debug 類別

Trace 類別

TextWriterTraceListener 類別