好吧,我认为标题可能会令人困惑......:)
我的应用程序使用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输出重新路由到我可以控制的内容?
答案 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.
}