Как выполнить анализ дампа - PullRequest
0 голосов
/ 29 апреля 2019

Я начал писать этот вопрос на сайте softwareengineering , но там, похоже, нет тега Dump, поэтому я решил написать свой вопрос здесь.

Чтобы решитьутечки памяти в собственных приложениях C ++, я использую скрипт ( heap_stat.py ), основанный на библиотеке PYKD, в Windbg.Это дает отчет, подобный следующему:

...
0x0c3c88bc  OwnApplication!CArray<ColumnInfo *,ColumnInfo *>     Size:[0]
0x0c3c8900  mfc140u!CMapStringToString   Size:[0],   hashTable_Size:[17]
0x0c3c891c  mfc140u!CMapStringToString   Size:[264], hashTable_Size:[17]
0x0c3c8938  mfc140u!CMapStringToString   Size:[0],   hashTable_Size:[17]
...

(записи Size и hashTable_Size являются настраиваемыми дополнениями)

Создание двух из этих отчетов и учет их различий позволяет мне искатьдля утечки памяти.(Я иногда использую heap_stat.py -stat)

Существуют различные проблемы с подходом heap_stat:

  1. heap_stat находит только объекты, имеющие виртуальные методы (он использует запись vftable вопределение класса символов для поиска первого поля классов. Это делается с помощью команды Windbg x /2 *!*vftable*).
    Если у класса нет виртуальных методов, соответствующие объекты не обнаруживаются heap_stat.
  2. heap_stat кажется ошибочным: сегодня утром я имел дело с CServiceModule (это класс с виртуальными методами), но в отчете heap_stat не упоминается ни один объект CServiceModule (скорее всего, команда Windbg heap -h 0 не делаетплохо разбирается).

Поэтому я начал задаваться вопросом: есть ли какой-либо другой настраиваемый инструмент (я бы хотел, чтобы он был изменяемым, чтобы я мог добавлять свои собственные запросы), который может перечислить всеобъекты (адрес памяти) и соответствующий им тип / класс?

Для вашей информации: я работаю с приложениями C ++, дампы памяти принимаютсяиспользуя procdump -e -ma.

...