我已經創建了一個調試聽者重定向從調試/控制檯窗口到文件輸出(帶有調用棧)調試輸出重定向到一個文件,使用以下代碼:問題使用跟蹤偵聽
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;
}
但輸出不會重定向到我指定的文件,它總是空的。
我從我的主窗體中的構造函數調用它。是我從一個問題中調用它的地方?
我在這裏想要實現的是將調試輸出窗口中的異常放置在具有調用堆棧的文件中,以便我可以找到並更正它們。
UPDATE:經過一番研究,我得出這樣添加新TraceListener
到Debug Listeners
收集不重定向從調試/控制檯輸出結論。它實際上只是響應Write
,WriteLine
等方法,就像缺省偵聽器一樣。 問題仍然存在:如何捕獲Debug/Console窗口的輸出以及如何獲取出現在那裏的異常的堆棧跟蹤?
任何人有任何想法?
你確定你應該添加到Debug.Listeners?調用Console.WriteLine和Debug.WriteLine會產生不同的行爲。如果您將偵聽器添加到調試中,但調用控制檯,則可能會導致您正在報告的問題。 – JustLoren 2011-04-06 15:21:07
@JustLoren - 我不確定你的意思。我在這裏要做的是在Visual Studio的調試控制檯窗口中將相同的輸出傳輸到一個文件,但是對於發生的每個異常都有一個調用堆棧。 – TheBoyan 2011-04-06 15:27:53
您應該嘗試通過調用您的函數來設置它,然後調用Debug.WriteLine(「Debugger Initialized」)來手動寫入您的Debug偵聽器。這應該驗證一切正常。如果您只是依賴框架,則無法確定輸出窗口實際正在監聽哪個流。 – JustLoren 2011-04-06 15:29:18