Я пытаюсь отслеживать ошибку, возникающую на целевой машине под управлением Windows 7 64-бит для приложения C# WinForms, написанного в Visual Studio 2008. Все, что мне нужно - это вывод отчета об ошибках Windows из средства просмотра событий. Я нашел много полезной информации здесь: http://www.codeilove.com/2012/09/debugging-using-windows-error-reporting.html.Интерпретация отчетов об ошибках Windows ouput
Problem signature:
P1: myprogram.exe // filename of the executable
P2: 1.44.0.0 // assembly version for the executable in P1
P3: 560be2df // assembly timestamp for the executable in P1
P4: mscorlib // assembly where the fault occurred
P5: 2.0.0.0 // assembly version for the assembly in P4
P6: 4ca2b889 // assembly timestamp for the assembly in P4
P7: c43 // token for the method where the fault occurred
P8: 59 // IL offset into the method specified in P7
P9: System.FormatException // name of the exception that caused the fault
Из связи представляется, что P7, P8 и P9 являются наиболее важными, и что я должен быть в состоянии найти способ размораживания для «C43» с помощью ILDASM ища 06000c43. В C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorlib.dll я нахожу следующее System.Number:
.method /*06000C43*/ assembly hidebysig static
uint64 ParseUInt64(string 'value',
valuetype System.Globalization.NumberStyles/*020003B6*/ options,
class System.Globalization.NumberFormatInfo/*020003B5*/ numfmt) cil managed
На основе этой информации есть System.FormatException происходит в System.Number .ParseUInt64, правильно? Я просмотрел свой проект в Visual Studio, и я не могу найти экземпляры, где мой код вызывает эту функцию. Куда я иду отсюда?
У меня есть обработчик исключений верхнего уровня для Application.ThreadException, который регистрирует необработанные исключения в файл. В этом случае я получаю крах приложения и ничего в моем файле журнала. Можно ли предположить, что это исключение происходит в потоке, отличном от моего пользовательского интерфейса?
Спасибо, это звучит так, как будто это именно то, что мне нужно. К сожалению, я выполнил шаги в ссылке, но файлы .dmp не создаются при сбое приложения. Может быть, потому, что я использую Visual Studio 2008? – Postvmvs
Да, возможно, это возможно .Net v3.5, который отличается от версии 4.0 и выше. Попробуйте 'procdump -e' https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx или (более сложную) процедуру по этой ссылке: http://blogs.msdn.com/b/dotnet/ архив/2009/10/15/автоматически-capture-a-dump-when-a-process-crashes.aspx –
@Postvmvs: см. [этот ответ] (http://stackoverflow.com/a/30469083/4136325) для список возможных причин. –