Ответ 1
Вы также можете указать это расширение отладчика. Это библиотека под названием SDbgExt, разработанная Skywing.
Вентиляторы Windbg утверждают, что он довольно мощный, и я склонен согласиться. Но когда дело доходит до отладки контейнеров STL, я всегда застрял. Если переменная находится в стеке, расширение !stl
иногда показывает это, но когда контейнер с сложным типом (например, std::vector<TemplateField, std::allocator<TemplateField> >
) находится в куче или части какой-либо другой структуры, я просто не знаю, как для просмотра его содержимого.
Оцените любые подсказки, указатели.
Вы также можете указать это расширение отладчика. Это библиотека под названием SDbgExt, разработанная Skywing.
Я часто нахожу поддержку отладчика для типов данных STL неадекватными. По этой причине я все чаще использую протоколирование фреймворков и протоколирование. Раньше я думал, что это для людей, которые не могут использовать отладчик, но теперь я понимаю, что они предлагают реальную ценность. Они позволяют вставлять переносимые знания отладки в ваш код и поддерживать их вместе с кодом. Напротив, работа, которую вы выполняете в отладчике, обычно является эфемерной.
Расширение Python для WinDbg (pykd) имеет фрагмент stlp.py, который может сбросить содержимое карты.
В настоящее время он поддерживает реализацию карты STLPort. Протестировано на x86 и x64.
Эта статья демонстрирует, как ее использовать (ее на русском языке, но, примеры не требуют пояснений).
У меня был тот же самый вопрос некоторое время назад. Я отвечаю, что Visual Studio действительно лучший отладчик для STL и сложных типов (так же, как Visual Studio - это просто лучший отладчик, чем MDbg).
Это не означает, что WinDBG менее эффективен, просто чтобы он был ниже уровня (например, попробуйте сделать что-нибудь полезное с дампами сбоев с помощью Visual Studio - вы не можете).
В любом случае, чтобы ответить на ваш вопрос, вы можете использовать Visual Studio для просмотра типов данных с помощью некоторых трюков:
cdb -p <PID> -pv
. Это приостановит потоки дебюта. Теперь вы можете безопасно отсоединить оригинальный WinDBG qd
qd
. Посмотрите на STL и продолжайте, как хотите.Я обычно заканчиваю метод toString()
во многих моих классах. Это показывает всю информацию, которую я считаю важной, любые контейнеры могут затем вызвать это, чтобы отобразить информацию о классе в консоли
Использовать dt -r i.e dt yourapp! class 7ffdf000 -r5