2015-11-09 7 views
0

Я пытаюсь отслеживать ошибку, возникающую на целевой машине под управлением 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, который регистрирует необработанные исключения в файл. В этом случае я получаю крах приложения и ничего в моем файле журнала. Можно ли предположить, что это исключение происходит в потоке, отличном от моего пользовательского интерфейса?

ответ

0

Начиная с Vista SP1, вы можете настроить отчет об ошибках Windows на collect local crash dumps. Просто установите параметры реестра на целевом компьютере, как описано в этой статье, и подождите, пока ваша программа снова не сработает. После этого проверьте каталог, настроенный как DumpFolder. Вы должны найти там файл .dmp. Откройте его в WinDbg или Visual Studio, и вы сможете увидеть полную статистику стека, где произошло исключение.

+0

Спасибо, это звучит так, как будто это именно то, что мне нужно. К сожалению, я выполнил шаги в ссылке, но файлы .dmp не создаются при сбое приложения. Может быть, потому, что я использую Visual Studio 2008? – Postvmvs

+0

Да, возможно, это возможно .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 –

+0

@Postvmvs: см. [этот ответ] (http://stackoverflow.com/a/30469083/4136325) для список возможных причин. –

 Смежные вопросы

  • Нет связанных вопросов^_^