好吧,我觉得标题可能会让人很困惑……:)
我的应用程序使用CS-Script作为脚本接口。在我的应用程序将要运行的脚本中,我希望有某种“调试打印”-这意味着在脚本中的某个地方,脚本编写者可以执行“Debug.Print(”BLAAAAH!“);”),这会出现在我非常时髦的输出对话框中的某个地方。
当然,我可以创建自己的调试输出内容,但由于我使用C#作为脚本语言,而使用C#的人将习惯于使用System.Diagnostics和Debug.Print("..."),如果我可以重新路由System.Diagnostics.Debug.Print("")和System.Diagnostics.Debug.WriteLine("..."),那就太好了。将它们的输出跟踪到我的酷输出窗口。
所以。
有没有人知道有没有可能将C#的System.Diagnostic.Debug打印/写入输出重新路由到我可以控制的地方?
发布于 2011-07-09 06:23:55
为此,您可以创建自定义TraceListener。
发布于 2011-09-19 17:00:14
应设置编译时调试符号或使用/dbg选项运行脚本
cscs /dbg <yourScript>您还需要创建一个自定义的TraceListener,或者简单地使用一个跟踪查看器,比如sysinternals DebugView
发布于 2011-09-19 17:42:55
我也使用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.
}https://stackoverflow.com/questions/6631178
复制相似问题