Анализирует ошибку приложения в msvcr80.dll, адрес ошибки 0x00008aa0 - PullRequest
1 голос
/ 28 октября 2009

Я отлаживаю неустойчивую проблему, в которой происходит сбой приложения (созданного с помощью C ++ в Visual Studio 2005). Журнал событий предоставляет следующую информацию:

faulting module msvcr80.dll
version 8.0.50727.1433
fault address 0x00008aa0

Я выполнил поиск в Google и обнаружил множество других примеров сбоя приложений с этим конкретным адресом ошибки, но без указания его значения.

Есть ли способ узнать, что msvcr80.dll делает по этому адресу?

Я попытался подключиться к запущенному экземпляру приложения из Visual Studio, чтобы увидеть, какой код находится по адресу 0x00008aa0 - но там, похоже, ничего нет!

В более общем смысле, учитывая адрес где-то в Windows DLL, есть ли способ выяснить, что делает код?

Ответы [ 4 ]

1 голос
/ 28 октября 2009

Windows никогда не сопоставит ничего с адресами ниже 0x10000, поэтому вы определенно AV'ing.

1 голос
/ 28 октября 2009

Адрес этот низкий обычно указывает на нарушение прав доступа нулевого указателя. Смещение доступа к элементу, к которому осуществляется доступ к базовому указателю, равно 8aa0. Выглядит как довольно большой объект. Я бы посоветовал вам добавить нулевые утверждения при разыменовании указателей на объекты большого типа данных.

1 голос
/ 28 октября 2009

Погуглив себя, кто-то предложил использовать средство обхода зависимостей , чтобы узнать, какой модуль вы используете, который напрямую зависит от msvcr80.dll - поскольку вы используете VS 2005.

Это может дать вам подсказку, с чего начать изоляцию ошибки.

0 голосов
/ 28 октября 2009

Вы можете попробовать использовать символы отладки Microsoft, в этом случае вы увидите обычное имя функции вместо адреса.

В VS2005 вы должны сделать:

  1. Перейдите в Инструменты -> Параметры -> Отладка -> Символы
  2. Вставьте http://msdl.microsoft.com/download/symbols в качестве местоположения символа
  3. Присоедините VS к вашему приложению и повторите сбой
...