Анализ дампа .NET с использованием windbg - PullRequest
3 голосов
/ 10 ноября 2011

Я отлаживаю дамп CLR .NET 3.5, используя windbg и расширение psscor2.dll .Код, где произошло исключение, выглядит следующим образом:

try 
{
 ...
}
catch
{
 ...
}
catch
{
 ...
}
finally
{
 ...
 // exception I found in the dump happened here.
 ...
}

Хорошо, поэтому с командой !pe у меня есть исключение.Это исключение с нулевой ссылкой, но реальная причина проблемы находится где-то выше, в попытке или в одном из перехватов, и возникшее там исключение маскируется этим в блоке finally.Приложение упало в ходе стресс-тестирования, поэтому создать репро не так просто, поэтому дамп - это все, что у меня есть.Есть ли у вас идеи, как я могу получить исключения, которые произошли до этого в блоке finally.Я не вижу ничего полезного в стеке (команда !dso), и на этом мои знания psscor2 заканчиваются более или менее:).

Спасибо.

1 Ответ

1 голос
/ 29 декабря 2011
  1. Используйте привязку windbg к вашему процессу, выполните "sxe clr" и дождитесь любых исключений 1-й вероятности нулевой ссылки и используйте команду! Pe для проверки стека вызовов.
  2. Вы можете использовать "! Dumpheap -type Exception", чтобы найти объекты, имена которых включают слово "Exception", а затем найти объекты NullReferenceException, использовать .foreach (ex {! Dumpheap -short -mt}) {! Pe ex }
  3. Вы можете найти параметры или локальные переменные в! Dso или! Clrstack -a
...