Tôi có hai ví dụ. Trong trường hợp đầu tiên, gỡ rối bắt ngoại lệ unhandled:Trường hợp ngoại lệ mất một phần của stacktrace trong bối cảnh try/catch
static void Main(string[] args) {
Exec();
}
static void Exec() {
throw new Exception();
}
Và ngoại trừ có đầy đủ stacktrace:
at ConsoleApplication28.Program.Exec()
at ConsoleApplication28.Program.Main(String[] args)
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Trường hợp thứ hai:
static void Main(string[] args) {
Exec();
}
static void Exec() {
try {
throw new Exception();
}
catch (Exception ex) {
} // Breakpoint
}
Tại breakpoint ngoại trừ có ngắn stacktrace:
at ConsoleApplication28.Program.Exec()
Tại sao stacktraces được cắt theo phương pháp chứa trong trường hợp thứ hai, và làm thế nào để ngăn chặn nó? Tôi cần stacktrace đầy đủ cho bugreports, nếu không nó đôi khi không thể tìm thấy có vấn đề là, mà không có stacktrace đầy đủ.
"Tôi cần stacktrace đầy đủ cho các báo cáo lỗi, nếu không đôi khi không thể tìm thấy vấn đề ở đây, không có stacktrace đầy đủ". Để trả lời một phần câu hỏi của bạn, bạn cần phải chèn cấu trúc try-catch ở đâu đó "ở trên", nơi có thể xảy ra ngoại lệ, có lẽ ngay ở đầu, trong phương thức Main() của bạn. Trong điều khoản bắt, bạn nên viết exceptionObject.ToString() vào một số tệp hoặc một cái gì đó để phân tích sau này. – RenniePet