Cs-Script& System.Diagnostics.Debug:覆盖Debug输出跟踪

时间:2011-07-08 22:21:19

标签: c# debugging

好吧,我认为标题可能会令人困惑......:)

我的应用程序使用CS-Script作为脚本界面。 在我的应用程序将运行的脚本中,我希望有一些“调试打印” - 意味着脚本中的某个地方,脚本编写者可以执行“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输出重新路由到我可以控制的内容?

3 个答案:

答案 0 :(得分:0)

为此,您可以创建自定义TraceListener

答案 1 :(得分:0)

您应该设置编译时DEBUG符号或使用/ dbg选项运行脚本

cscs /dbg <yourScript>

您还需要创建自定义TraceListener或仅使用跟踪查看器,例如sysinternals DebugView

答案 2 :(得分: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集合注册侦听器。

e.g。

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.
}