2010-06-09 4 views
5

Мое приложение вызывает InvalidCastException в среде QA, что я не могу воспроизвести в процессе разработки.Как создать minidump .NET-процесса при возникновении определенного первого исключения исключения

Я хочу получить мини-насос в момент исключения. Я знаю об adplus, но я не уверен, как использовать его, чтобы он создавал minidump при вызове InvalidCastException. По-видимому, он не отличает одно исключение .NET от другого. Возможно, я ошибаюсь, и есть способ. Или, есть еще один инструмент для этого. Предпочтительно, свободный.

В любом случае, может ли кто-нибудь посоветовать, как справиться с этой проблемой?

Спасибо.

UPDATE

  1. Сборки отладки сборки как в QA и разработчика. Тем не менее, QA запускает сложные сценарии, сделанные в лаборатории, которые разработчики не могут воспроизвести. Следовательно, мне нужна возможность делать дамп при работе в QA.
  2. Я могу изменить код и создать minidump из кода. Тем не менее, я желаю более гибкого решения, которое не требует модификации кода каждый раз, когда возникает такая проблема.

ОБНОВЛЕНИЕ 2

На самом деле, я «украден» код поколения минидампы от Джона Robbins SuperAssert.Net Опять же, это код для генерации минидампы от определенной конкретной точки, в то время как мне нужно более гибким подход в стиле adplus. Подход Джона Роббинса создает сценарий cdb, а затем вызывает отладчик cdb с этим скриптом, чтобы привязать его к процессу и создать дамп. Он не использует API MiniDumpWriteDump.

+0

Быстрый вопрос - у вас есть строка кода, где литая происходит?Скомпилирована ли среда QA в режиме «Release», а не «Debug»? – Paddy

+0

Окружающая среда QA - это то же самое, что и dev, насколько это касается сборки. Важно то, что среда QA распространяется, а разработчики запускают все на одной машине. – mark

ответ

5

Самый простой способ - это позволить пузыриться на всем пути из приложения, сообщить пользователю об этом Microsoft и записаться в отчет об ошибках Windows.

В качестве альтернативы вы можете захватить его вручную, используя SUPERASSERT .NET (или подмножество его кода) Джона Роббинса.

ОБНОВЛЕНИЕ (для некодового решения): Взгляните на системные элементы 'ProcDump.

+0

Дело в том, что мне нужно не интерактивное решение, и мне это нужно сейчас. – mark

+0

Подумайте о моем втором решении. Взятие minidump текущего процесса не является тривиальным, поэтому я рекомендую вам просто использовать код Джона Роббинса. –

+0

На самом деле, я «украл» код поколения minidump от John robbins. SuperAssert.Net Опять же, это код для генерации minidump из определенной конкретной точки, тогда как мне нужен более гибкий подход в стиле adplus – mark

2

Возможно, вам нужно .грузить sos.dll в сценарий ADPlus. Это blog post показывает вам, как это сделать.

Остерегайтесь сомнительных радостей отлаживаемого управляемого кода из мини-насоса. Если вы сталкиваетесь с трудными для диагностики исключениями, пока он все еще находится в QA, вы снова столкнетесь с ним, когда он начнет производство. С драконами добавился дышащий огонь. Позаботьтесь о хорошем необработанном журнале регистрации ошибок, написав обработчик событий для AppDomain.UnhandledException. Ведение журнала e.ExceptionObject.ToString() дает массу информации.

3

Возможно, вы используете API MiniDumpWriteDump в своем приложении C#? Посмотрите на http://blog.kalmbach-software.de/2008/12/13/writing-minidumps-in-c/ для примера кода или выполните поиск в Internat для MiniDumpWriteDump и C#.

Если вы используете Visual Studio 2010 вы можете загрузить минидампа непосредственно в Visual Studio (см http://msdn.microsoft.com/en-us/library/d5zhxt22(v=VS.100).aspx)

+0

Обновите вопрос о том, как я создаю minidump из кода. – mark

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

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