2011-07-08 20 views
2

好吧,我覺得標題可以相當混亂...... :)銫腳本和System.Diagnostics.Debug:重寫調試輸出走線

我的應用程序正在使用CS-腳本作爲腳本接口。 在我的應用程序將運行的腳本中,我想要有某種「調試打印」 - 意味着腳本中腳本可以執行的某個地方「Debug.Print(」BLAAAAH !!!「);」),並顯示在我時髦的輸出對話框的某處。

當然,我可以創建自己的debug-ooutput-stuff,但是由於我使用C#作爲腳本語言,並且使用C#的人將被用於使用System.Diagnostics並使用Debug.Print(「... 「), 如果我可以重新路由System.Diagnostics.Debug.Print(」「)和System.Diagnostics.Debug.WriteLine(」...「)來追蹤它們的輸出到我的酷輸出窗口,那將是非常好的。

所以。

有誰知道是否有可能將C#的System.Diagnostic.Debug print/writeline輸出重新路由到我控制的東西?

+0

什麼是CS腳本? –

回答

0

應設置編譯時調試符號或運行帶/ DBG選項的腳本

cscs /dbg <yourScript> 

您還需要創建一個自定義TraceListener或者乾脆使用跟蹤觀衆喜歡的Sysinternals DebugView

0

我使用的TraceListener這個還可以,但這裏是我的代碼片段:

類:

using System.Diagnostics; 

public class DebugOutputListener : TraceListener 
{ 
    public event EventHandler<DebugMessageArgs> DebugMessage; 

    public override void Write(string message) 
    { 
     EventHandler<DebugMessageArgs> h = DebugMessage; 
     if (h != null) 
     { 
      DebugArgs args = new DebugArgs 
      { 
       Message = message 
      }; 
      h(this, args); 
     } 
    } 

    public override void WriteLine(string message) 
    { 
     Write(message + "\r\n"); 
    } 
} 

public class DebugMessageArgs : EventArgs 
{ 
    public string Message 
    { 
     get; 
     set; 
    } 
} 

要接收調試消息,請實例化DebugOutputListener的實例,訂閱DebugMessage事件處理程序並向Debug.Listeners集合註冊偵聽程序。

例如

private void InitialiseDebugListener() 
{ 
    DebugListener dl = new DebugListener(); 
    dl.DebugMessage += new EventHandler<DebugArgs>(Console_OnDebugMessage); 
    Debug.Listeners.Add(dl); 
} 


private void Console_OnDebugMessage(object sender, DebugMessageArgs e) 
{ 
    string debugMessage = e.Message; 

    // Do what you want with debugMessage. 
    // Be aware this may not come in on the application/form thread. 
}