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

Есть ли способ узнать, какое исключение было перехвачено кодом .NET извне приложения?

Я обнаружил, что API-интерфейс для 3d-вечеринок выдает исключение и подавляет его (я вижу, что счетчик перфомансов повышается).

Но это не показывает его в трассировке (я пробовал sysinternals dbgView).

Какой инструмент может показать пойманное исключение?

Ответы [ 2 ]

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

Инструмент, к которому я всегда обращаюсь в этой ситуации, - это WinDBG. Загрузите 32-битную версию или 64-битную версию , в зависимости от разрядности процесса.

По какой-то неубедительной причине последняя версия не имеет прямой ссылки на скачивание (доступна только в SDK), поэтому перейдите к разделу «Предыдущая версия» и возьмите последнюю из них.

Загрузите WinDBG после установки и сделайте следующее:

  1. Файл -> Присоединить к процессу (F6)
  2. Выберите целевой процесс и нажмите «Открыть»
  3. В консоли введите следующее:
    • .loadby sos mscorwks (загружаются расширения отладчика .NET)
    • sxe clr (сообщает отладчику прерывать управляемые исключения)
    • g (GO!)
  4. Запускайте процесс до возникновения исключения.
  5. Отладчик сломается, после чего введите !pe, чтобы увидеть подробности исключения.

Команда !clrstack полезна для просмотра управляемого стека или попытки !dumpstack включить собственные вызовы.

Если отладчик останавливается на исключении, которое вас не волнует, просто нажимайте «g» снова, пока не получите то, которое хотите увидеть.

Команда !help покажет все доступные расширения .NET, и, если вы хотите копать глубже, я настоятельно рекомендую блог Тесс Феррандез .

1 голос
/ 23 июня 2010

Можете ли вы подключиться к процессу с помощью удаленного отладчика в Visual Studio и настроить его на разрыв при возникновении исключения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...