Как создать мини-дамп процесса .NET при возникновении определенного первого случайного исключения - PullRequest
5 голосов
/ 09 июня 2010

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

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

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

Спасибо.

UPDATE

  1. Сборка является сборкой Debug как в QA, так и в dev. Однако QA запускает сложные сценарии, которые стали возможными в лаборатории, которые разработчики не могут воспроизвести. Поэтому мне нужна возможность делать дамп при запуске в QA.
  2. Я могу изменить код и создать мини-дамп из кода. Однако я хочу более гибкое решение, которое не требует изменения кода каждый раз, когда возникает подобная проблема.

ОБНОВЛЕНИЕ 2

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

Ответы [ 3 ]

5 голосов
/ 09 июня 2010

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

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

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

3 голосов
/ 09 июня 2010

Возможно, вы хотите использовать MiniDumpWriteDump API в своем приложении 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)

2 голосов
/ 09 июня 2010

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

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

...