2011-08-10 4 views
1

Я изучаю неисправный код. верификатор Application показывает кучи повреждена после вызова ниже:Поиск местоположения сбоя с использованием файла карты

AA!Class::Function+dbaf 

У меня есть файл карта с me.please помочь мне, как добраться на номере строки с использованием выше информации и информации, представленной в файл карты.

Предпочтительного адрес нагрузки 00400000

0002:00000dc4  [email protected]@@[email protected][email protected]@[email protected][email protected]@@[email protected]@@[email protected]@[email protected]@Z 0049bdc4 

Примечание: Я анонимный класс и имя функции.

+0

Это на линии 12. (Я получил анонимные номера строк в ответе.) –

+0

@ Kerrek, :) Мне понравился ответ. Я анонимизировал, потому что моей компании это может не понравиться. Надеюсь, вы это поняли. Спасибо – Satbir

+0

@Sabir: Конечно, простите за шутки ... реальная проблема в том, что почти невозможно сказать что-нибудь полезное, если вы не публикуете часть кода и не выполняете какую-либо отладку, чтобы узнать, где происходит авария. Скомпилируйте с помощью отладочных символов для начала, тогда ваш отладчик должен уже сказать вам, куда идти. –

ответ

1

У вас есть только файл карты? Нет PDB? Если у вас есть полные символы, используйте карту и .pdbs (и .exe) с помощью WinDBG (вы на окнах?). Я бы предположил, что вы видите, как вам присвоено имя функции.

ЕСЛИ НЕ ... dbaf - ваш ответ. Что это значит? Смещение должно быть местонахождение ошибочных инструкций. Конечно, вам нужно выяснить количество инструкций (инструкции по сборке), которые у каждого есть.

+0

У него есть pdb, иначе он не смог отобразить AA! Class :: Function. Это не очень хорошо, но 0xdbaf - довольно большое смещение. Его карта, таким образом, вероятно, тоже отвратительна. –

+0

AA! Class :: Function + dbaf находится в файле результатов верификатора приложения, который сообщает, что куча повреждена. Спасибо за Ваш ответ. Теперь я попытаюсь использовать отладчик, используя файлы символов. – Satbir

0

Я помню, как мог перейти к ошибочному коду, имея только файл карты и значение EIP (указатель инструкции, адрес, где был разбит код), быстрый поиск по Google указал мне на эту веб-страницу: Map Files And DLL Rebasing. Из того, что я помню в идеальной ситуации, вы можете изменить значение EIP непосредственно в отладчике Visual C++ и перейти к соответствующей строке кода.

Теперь, это было действительно давно в эпоху Visual C++ 6, я даже не знаю, действительно ли это применимо сегодня. Как уже указывалось, вы должны действительно изучить символы и параметры базы данных программы в Visual C++, есть тонны информации о том, как их устанавливать и использовать.