Windows — Как прочитать данные приложения Minidump с полными данными приложения для приложения Visual C ++?

У меня есть приложение, которое перешло в состояние зависания. Это приложение действительно представляет собой комбинацию из трех разных exes. UI.exe, core.exe, core.dll. все они в основном построены на VC ++. поэтому, когда я просматриваю журналы приложений, я вижу, что ui.exe где-то остановлен. Поэтому я взял мини-дамп с полными данными приложения через диспетчер задач-> процессы-> выберите файл ui.exe и core.exe, щелкните его правой кнопкой мыши и выберите «Создать файл дампа». У меня есть около 150 МБ + данных, представленных в файле ui.exe dmp. как это проанализировать?

Пока я могу загрузить файл дампа со всеми необходимыми ему файлами pdb (приложение + система) и успешно загрузить значения. Я могу видеть, что приложение работает, но не отвечает на запрос core.exe.

Теперь я действительно ищу данные приложения, находящиеся в куче и стеке ui.exe и core.exe, с помощью которых я могу проверить, куда накапливаются данные. какая переменная / массив поглощает значение. Кто-нибудь может сказать мне путь для этого?

-2

Решение

Есть несколько вариантов, в зависимости от типа зависания. Одним из них является низкая зависание процессора, что может привести к тупику. Другой — высокая загрузка процессора, которая может быть бесконечной петлей. Отладка тупика, как правило, проще, поскольку вы получаете хорошие и всегда одинаковые стеки вызовов. Отладка высокого зависания процессора сложнее, потому что могут быть разные стеки вызовов, в зависимости от времени, когда вы взяли дамп. Вам понадобится несколько дампов — или лучше используйте профилировщик.

Чтобы ответить на ваши вопросы:

Как это проанализировать?

Есть три основных варианта

  • Visual Studio. Это кажется тем, что вы сделали, но по какой-то причине вы не можете сделать вывод из того, что видите. Это может произойти из-за того, что Visual Studio не предлагает необходимые этапы анализа или они где-то скрыты, поэтому вы их не нашли.
  • WinDbg безусловно, это выбор для всех парней, которые хотят больше команд и больше контроля. Загрузите его сейчас, начните использовать его для простых случаев, ознакомьтесь с ним и, наконец, вы его возненавидите, но все же это ваш любимый отладчик. Так как нелепо трудно учиться, вы не добьетесь большого успеха в этом деле. Если вы идете на это, используйте !analyze -v как ваша первая команда. Но в любом случае попробуйте
  • DebugDiag. Сделайте анализ зависания, и, надеюсь, он даст вам некоторую полезную информацию.

Кто-нибудь может сказать мне способ для этого? [выяснение, где данные накапливаются]

Я не могу ясно увидеть, как большой объем данных связан с зависшим приложением. Данные находятся в стеке или в куче, в зависимости от того, как вы реализовали свое приложение. Обратите внимание, что в C ++ нет четкого отображения между типами объектов и памятью, как в .NET. Вы не можете просто набрать команду, как Покажите мне все объекты типа Xyz.

В Visual Studio вам могут повезти с локальными переменными и т. Д., Поскольку они могут быть разрешены. В WinDbg вы бы использовали некоторые из !heap команды и, возможно, настроить некоторые Gflag настройки для отслеживания распределения памяти.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector