使用跟踪侦听器将调试输出重定向到文件时出现问题
本文关键字:文件 问题 重定向 输出 跟踪 侦听器 调试 | 更新日期: 2023-09-27 17:49:17
我已经创建了一个调试侦听器,将输出从debug/Console窗口重定向到一个文件(带有调用堆栈),使用以下代码:
void SomeMethod()
{
// Create a file for output .txt.
Stream debugFile = File.Create(fileName);
// create TextWriterTraceListener named "file"
TextWriterTraceListener debugWriter = new TextWriterTraceListener(debugFile, "file");
// add to debug listeners
Debug.Listeners.Add(debugWriter);
// set callstack to be shown
Debug.Listeners["file"].TraceOutputOptions |= TraceOptions.Callstack;
// set auto-flush
Debug.AutoFlush = true;
}
但是输出不会重定向到我指定的文件,它总是空的。
我是从主窗体的构造函数中调用的。我叫它的地方有问题吗?
我在这里想要实现的是将Debug输出窗口中的异常放置在具有调用堆栈的文件中,以便我可以找到它们并纠正它们。
UPDATE:经过一些研究,我得出结论,将新的TraceListener
添加到Debug Listeners
集合不会重定向Debug/Console的输出。它实际上只是响应Write
, WriteLine
等方法,就像默认侦听器一样。问题仍然存在:如何捕获调试/控制台窗口的输出,以及如何获得出现在那里的异常的堆栈跟踪?
有人有什么想法吗?
这里有一篇文章回答了我的部分问题:http://www.codeproject.com/KB/trace/DbMonNET.aspx
。如何捕获调试/控制台窗口的输出。但是,似乎没有办法从这个输出中获得堆栈跟踪。从这个角度来看,这似乎是一个糟糕的方法。
进一步研究:看起来这些异常正在出现,因为它们是在其他一些没有正确链接的dll中处理的,它们在那里处理而不是我的try/catch块。这可能是我应该寻找我的错误的地方,即在那里有一个dll参考,我应该添加一个项目参考。
更多研究 :在Visual Studio主菜单中启用在异常时中断:Debug -> exceptions ->检查您希望应用程序在公共语言运行时中断的异常类型…没有比处理异常更好的方法了。