tôi khuyên bạn nên bãi chứa của quá trình này khi ngoại lệ xảy ra. Trong cùng một vị trí mà bạn đang đăng nhập ngoại lệ, hãy gọi phương thức MakeDumpFile() như dưới đây.
Giả sử bạn đã cài đặt Debugging Tools For Windows trên máy có vấn đề.
private static void MakeDumpFile()
{
int pid = Process.GetCurrentProcess().Id;
Console.WriteLine("Creating dump for pid " + pid);
//path to adplus executable; ensure you have Debugging tools installed;
string program = @"C:\Program Files (x86)\Debugging Tools for Windows (x86)\adplus.exe";
//args for adplus; ensure the crashdump folder exists!
string args = string.Format(@"-hang -p {0} -o c:\crashdump", pid);
var startInfo = new ProcessStartInfo(program, args);
startInfo.UseShellExecute = false;
startInfo.ErrorDialog = false;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
var process = Process.Start(startInfo);
Console.WriteLine("The following is output from adplus");
Console.WriteLine(process.StandardOutput.ReadToEnd());
Console.WriteLine("Finished creating dump.");
}
Điều hướng đến thư mục kết xuất và bạn sẽ thấy một thư mục mới có tệp có tên FULLDUMP_something_.dmp.
Nếu bạn đang ở trên .NET4 bạn chỉ có thể kéo tên này vào VS2010 và kiểm tra tất cả các chủ đề hoặc sử dụng đề song song để xem những gì đang xảy ra (điều này là tuyệt vời!)
Nếu trên NET3.5 hoặc sớm hơn bạn sẽ cần phải sử dụng windbg để phân tích. Sử dụng lệnh sau
~ * e! Clrstack
để in callstack của tất cả các chuỗi được quản lý. Nếu bạn cần thêm trợ giúp, hãy tải bài đăng về windbg hoặc google để có hướng dẫn.
Tôi chỉ đang tìm kiếm một cái gì đó như thế này bản thân mình vào ngày khác (và đến khi câu hỏi này: http://stackoverflow.com/questions/190236/how-do-i-make-a-thread-dump-in- net-a-la-jvm-thread-dumps). Có vẻ như bạn có thể không may mắn, nhưng vẫn tốt để xem những người trả lời câu hỏi đó phải nói gì. –
Cảm ơn Dan, tôi đã lấy một số nội dung khá hữu ích từ câu hỏi được liên kết của bạn ... –