Làm cách nào để tôi có thể viết dấu vết ngăn xếp của một ngoại lệ chưa được xử lý (được ném từ bất kỳ chuỗi nào) vào một tệp?Viết dấu vết ngăn xếp khi một ngoại lệ được ném từ một chủ đề khác
Tôi cần điều này để giúp gỡ lỗi ứng dụng treo.
Làm cách nào để tôi có thể viết dấu vết ngăn xếp của một ngoại lệ chưa được xử lý (được ném từ bất kỳ chuỗi nào) vào một tệp?Viết dấu vết ngăn xếp khi một ngoại lệ được ném từ một chủ đề khác
Tôi cần điều này để giúp gỡ lỗi ứng dụng treo.
Cảm ơn tất cả các bạn, nhưng tôi đã thấy rằng khi tôi chạy chương trình từ Visual Studio đầu ra của dấu vết được viết bởi .NET đến cửa sổ giao diện điều khiển khi một ngoại lệ unhandled từ bất kỳ thread được ném không được chuyển hướng đến cửa sổ giao diện điều khiển.
Nó chỉ được chuyển hướng khi tôi chạy chương trình được tách ra khỏi Visual Studio. Vì vậy, mã này rất tốt để xem tất cả các dấu vết ngăn xếp từ bất kỳ chủ đề nào ném một ngoại lệ không được xử lý
Trace.Listeners.Clear();
TextWriterTraceListener twtl = new TextWriterTraceListener(Path.Combine(Environment.CurrentDirectory, "logfile.txt"));
twtl.Name = "TextLogger";
twtl.TraceOutputOptions = TraceOptions.ThreadId | TraceOptions.DateTime | TraceOptions.Callstack;
ConsoleTraceListener ctl = new ConsoleTraceListener(false);
ctl.TraceOutputOptions = TraceOptions.DateTime;
Trace.Listeners.Add(twtl);
Trace.Listeners.Add(ctl);
Trace.AutoFlush = true;
Hãy xem AppDomain.UnhandledException sự kiện. Có vẻ như đây chính xác là những gì bạn cần.
Tôi tin rằng bạn có thể thực hiện việc này bằng cách nghe sự kiện AppDomain.UnhandledException. Trong trường hợp của WPF nó đáng nghe Application.Current.Dispatcher.UnhandledException cũng
Bạn có thể lấy theo dõi chồng trong khối catch bởi ex.StackTrace như dưới đây:
try
{
//Your code;
}
catch(Exception ex)
{
string innerException = ex.InnerException;
string stackTrac = ex.StackTrace;
//Write this stackTrac to any file where you want
}