![]() |
PIP 6.2.0
Platform-Independent Primitives
|
Вместе с PIP поставляется скрипт pretty-printer'ов для GDB, tools/gdb/pip_pp.py, который выводит содержимое базовых типов вместо их внутренних полей:
| Тип | Пример вывода |
|---|---|
| PIString | "hello" |
| PIByteArray | {0x48, 0x65, 0x6c, 0x6c, 0x6f} |
| PIChar | 'a' или U+043c |
| PIVector<T> | {1, 2, 3} |
| PIDeque<T> | {1, 2, 3} |
| PIStringList | {"one", "two"} |
| PIMap<K,V> | {"x": 1, "y": 2} |
| PISet<T> | {3, 5} |
| PIPair<K,V> | {"k", 7} |
| PIVariant | PIVariant(pivInt, 4 bytes) |
| PINetworkAddress | 192.168.1.10:8080 |
Вложенные контейнеры выводятся рекурсивно, например PIVector<PIString> выводится как {"a", "bb"}. Указатели на поддерживаемые типы показывают адрес и содержимое: (PIString *) 0x7fffffffdac0 "hello".
Принтеры только читают память и защищены от ошибок: при любом сбое GDB возвращается к стандартному (сырому) выводу. Длинные контейнеры обрезаются, по умолчанию выводится первые 32 элемента (хвост показывается как ..., ... (N total)); ограничение задаётся константой _MAX_ELEMENTS в начале файла pip_pp.py.
Требование: исполняемый файл и библиотека PIP должны быть собраны с отладочной информацией (-g).
Вручную (работает с любым деревом сборки):
Выполнять после загрузки исполняемого файла (в сессии, запущенной как gdb ./program, или после команды file).
Автоматически: CMake install ставит скрипт в <prefix>/share/pip/gdb/pip_pp.py и auto-load заглушку <prefix>/lib/libpip.so-gdb.py рядом с библиотекой. GDB выполняет заглушку автоматически при загрузке libpip.so (см. руководство GDB, "Auto-loading extensions"). Если библиотека установлена вне стандартного auto-load safe path GDB, добавьте каталог один раз:
Или создайте <homedir>/.gdbinit файл и запишите туда строку
, где root_dir - это корневая директория, в рамках которой находятся библиотека и скрипт pip_pp.py.
Заглушка устанавливается только для shared-сборок; для статических сборок используйте ручной source.
Окна Variables/Expressions в Qt Creator не используют pretty-printer'ы GDB — у них собственный Python-дампер. PIP предоставляет модуль дампера tools/qtcreator/pip_types.py, который покрывает те же типы, что и pip_pp.py. Для включения:
После этого PIString, PIVector<T>, PIMap<K,V> и другие типы из таблицы выше будут показывать своё содержимое в окнах «Переменные» и «Выражения». Изменения в настройках GDB (.gdbinit, auto-load заглушка) для Qt Creator не нужны; они продолжают работать для GDB из командной строки.
Скрипт проверки собирает демо со всеми поддерживаемыми типами и сверяет ожидаемый вывод GDB: