我有一個正在運行的c#控制檯應用程序。我已經發布了它,因爲我想在幾臺電腦上做一些測試。從崩潰的EXE中查找堆棧跟蹤日誌
應用程序有時會導致一個錯誤和一個Window彈出窗口,迫使我關閉應用程序,然後關閉控制檯,然後才能查看有問題的異常。
有沒有什麼辦法可以看到類似在Visual Studio中運行它的堆棧跟蹤日誌?我認爲這可能是通過Windows事件查看器,但我不完全確定這一點。或者至少允許控制檯可見並且在我確認存在錯誤時不會自動關閉。
我有一個正在運行的c#控制檯應用程序。我已經發布了它,因爲我想在幾臺電腦上做一些測試。從崩潰的EXE中查找堆棧跟蹤日誌
應用程序有時會導致一個錯誤和一個Window彈出窗口,迫使我關閉應用程序,然後關閉控制檯,然後才能查看有問題的異常。
有沒有什麼辦法可以看到類似在Visual Studio中運行它的堆棧跟蹤日誌?我認爲這可能是通過Windows事件查看器,但我不完全確定這一點。或者至少允許控制檯可見並且在我確認存在錯誤時不會自動關閉。
你可以做所有你提到的事情。例如要查看控制檯窗口中的錯誤,可以在代碼中放置一個try catch塊並調用Console.WriteLine()和Console.ReadLine()方法。
還有stacktrace.tostring()方法 - 例如,
http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.tostring(v=vs.110).aspx
控制檯應用程序自動關閉,即使你把Console.WriteLine()在你的代碼。你需要的是最後的Console.ReadLine(),也許在你的try catch塊的finally部分。
這樣,控制檯窗口將保持打開狀態。
您也可以通過控制檯ap將事件寫入事件日誌,並在事件查看器中查看它們。
這是通過使用System.Diagnostics命名空間的EventLog.CreateEventSource方法完成的。下面的鏈接:
http://support.microsoft.com/kb/307024
另一種方法是使用system.IO寫行日誌文件(如.txt文件),所以你可以在錯誤回頭看,如果該過程在深夜跑例如。在這種情況下,你可以使用如下代碼:
public static void LogMessage(string message)
{
TextWriter textWriter = new StreamWriter("download.log", true);
textWriter.WriteLine(message);
textWriter.Close();
}
,然後在您的例外:
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Logging.LogMessage(ex.Message);
}