Ich schlage vor, einen Dump des Prozesses, wenn die Ausnahme auftritt. An derselben Stelle, an der Sie die Ausnahme protokollieren, rufen Sie die MakeDumpFile() -Methode wie folgt auf.
Dies setzt voraus, dass Sie Debugging Tools For Windows auf der problematischen Maschine installiert haben.
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.");
}
Navigieren Sie zu dem Dump-Verzeichnis und Sie sollten einen neuen Ordner mit einer Datei sehen darin FULLDUMP_something_.dmp benannt.
Wenn Sie auf .NET4 sind Sie einfach diese in VS2010 ziehen und alle Threads überprüfen oder parallele Threads verwenden, um zu sehen, was los ist (das ist genial!)
Wenn auf NET3.5 oder früher Sie müssen Windbg verwenden, um zu analysieren. Verwenden Sie den folgenden Befehl
~ * e! Clrstack
die Aufrufhierarchie aller verwalteten Threads zu drucken. Wenn Sie mehr Hilfe benötigen, um windbg gehen Post zurück oder google für ein Tutorial.
Ich war gerade auf der Suche nach so etwas neulich (und kam auf diese Frage: http://stackoverflow.com/questions/190236/how-do-i-make-a-thread-dump-in- net-a-la-jvm-thread-dumps). Sieht so aus, als ob du kein Glück mehr hast, aber es ist immer noch gut zu sehen, was diejenigen, die diese Frage beantwortet haben, zu sagen haben. –
Danke Dan, ich habe ein paar nützliche Dinge aus deiner verlinkten Frage gezogen ... –