Как включить симпатичную печать GDB для объектов C ++ STL в Eclipse CDT? - PullRequest
39 голосов
/ 13 февраля 2011

Я пытаюсь добавить симпатичную печать для объектов STL в eclipse cdt.Я попытался выполнить шаги, описанные здесь:

http://sourceware.org/gdb/wiki/STLSupport

Я проверил папку Python, но, похоже, не могу это сделать ...

Я создал gdbinit и выбрал для своей конфигурации отладки, но всякий раз, когда я пытаюсь начать отладку, я получаю следующую ошибку:

Error while executing Python code.
!STACK 0
java.lang.Exception: /home/lizardking/workspace/eu.sofia.kpi.cpp.x86.testapp/.gdbinit:6: Error in sourced command file:
Error while executing Python code.
        at org.eclipse.cdt.dsf.mi.service.command.AbstractMIControl$RxThread.processMIOutput(AbstractMIControl.java:824)
        at org.eclipse.cdt.dsf.mi.service.command.AbstractMIControl$RxThread.run(AbstractMIControl.java:662)

Если я пытаюсь выполнить содержимое gdbinit в оболочке Python, я получаю этоошибка:

Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import sys
sys.path.insert(0, '/home/Documents/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named libstdcxx.v6.printers

Кажется, у меня нет такого модуля ... У меня нет понятия о Python, поэтому я даже не знаю, что такое "модуль" в Python ....

Может ли кто-нибудь помочь мне с этим?Для меня очень важно иметь возможность видеть реальную отладочную информацию или полезно выразить это так.Или каким-то образом я могу отладить даже из консоли и получить хороший вывод из gdb, потому что, если я, например, выхожу напечатать строку, я получаю бесполезный вывод ....

С уважением, Алекс

Ответы [ 5 ]

58 голосов
/ 19 апреля 2011

Это решение, которое работает для меня.

Скачать (http://www.gnu.org/software/gdb/download/) и установить последнюю версию GDB (т. Е. С --prefix $ HOME). Он поддерживает сценарии Python.

Получить красивые принтеры Python, выполнив

svn co svn: //gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

в каталоге по вашему выбору (например, $ (HOME) / distribs / gdb_printers). Вы получите подкаталог «python» в каталоге оформления заказа.

Поместите это в ваш файл $ (HOME) /. Gdbinit с правильным путем к красивым принтерам:

python
import sys 
sys.path.insert(0, '/home/YOUR_NAME_HERE/distribs/gdb_printers/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

Это делает красивую печать пригодной для использования через интерфейс командной строки gdb ( >(gdb) p my_std_string).

Далее объясняется использование при отладке в Eclipse.

Загрузка (http://download.eclipse.org/eclipse/downloads/) последняя стабильная сборка или выпуск Eclipse для Stream (> = 3.7 версия).

Загрузить (http://download.eclipse.org/tools/cdt/builds/8.0.0/index.html для Eclipse Indigo или http://www.eclipse.org/cdt/downloads.php для Eclipse Juno) новейшие инструменты разработки Eclipse C / C ++ (Eclipse CDT).

Запустите Eclipse и выберите каталог рабочей области, в котором будут храниться ваши параметры (например, $ HOME / projects). Нажмите Справка-> Установить новое программное обеспечение ... Нажмите Добавить ...-> Архивировать ... и выберите сборку CDT, которую вы только что загрузили. Затем вы должны выбрать компоненты для установки: щелкните Основные функции CDT -> Инструменты разработки C / C ++ (и, возможно, другие компоненты по вашему выбору). Затем продолжите установку и перезапустите Eclipse.

Укажите правильное расположение gdb и .gdbinit в Eclipse и убедитесь, что опция Pretty Printing включена:

Window -> preferences -> C/C++ -> Debug -> GDB

Теперь вы можете видеть контейнеры STL, хорошо напечатанные в представлении Variables во время отладки в Eclipse.

Другие команды могут использоваться, чтобы сделать вывод gdb более приличным:

set print pretty on
set print object on
set print static-members on
set print vtbl on
set print demangle on
set demangle-style gnu-v3
set print sevenbit-strings off

ОБНОВЛЕНИЕ: Что касается того, чтобы заставить его работать для старых проектов, см. Пункт 4) в ответе rustyx ниже.

UPDATE2: в Ubuntu 12.04 есть libstdc ++ 6-4.6-dbg, который устанавливает /usr/share/gcc-4.6/python/libstdcxx/ модуль python для вас

10 голосов
/ 02 марта 2012

Я знаю, что это не отвечает на первоначальный вопрос, но я подумал, что это может быть полезно для тех, кто отлаживает в Eclipse на Windows / MinGW .Процедура для Windows аналогична:

1) Получить Python 2.7.x из http://python.org/download/

2) Создать .gdbinit где-нибудь, содержащее что-то вроде этого:

python
import sys
sys.path.insert(0, 'C:/MinGW/share/gcc-4.6.1/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

3) Настройте Eclipse CDT для использования C:\MinGW\bin\gdb-python27.exe в качестве отладчика, а .gdbinit в качестве файла конфигурации.

4) Повторно создайте сеанс запуска отладки (удалите старый и создайте новый изцарапина).

5 голосов
/ 10 января 2013

Я хотел бы расширить ответ Windows 7, потому что некоторые ключевые шаги опущены:

Это для пользователей MinGW с Eclipse CDT

0) Если у вас нет pythonGDB, откройте оболочку / команду и используйте MinGW-get.exe для «установки» Python с поддержкой Python, например

   MinGw-get.exe install gdb-python

1a) Получите Python 2.7.x из http://python.org/download/ и установите

1b) Убедитесь, что PYTHONPATH и PYTHONHOME установлены в вашей среде:

 PYTHONPATH should be C:\Python27\Lib   (or similar)
 PYTHONHOME should be C:\Python27

1c) Добавьте PYTHONHOME к вашей PATH

 %PYTHONHOME%;...

2a) Откройте текст, введите, введитеследующие утверждения.Обратите внимание, что 3-я строка указывает, где расположены скрипты Python.Об этом см. Примечания ниже!

python
import sys
sys.path.insert(0, 'C:/MinGW/share/gcc-4.6.1/python')         
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

2b) Сохранить как «.gdbinit» ПРИМЕЧАНИЕ. Проводник Windows не позволяет назвать файл, имя которого начинается с точки из проводника.Большинство текстовых правок (включая Блокнот) позволит вам.Файлы инициализации GDB похожи на «сценарии» команд GDB, которые GBD будет выполнять при загрузке.

2c) Файл '.gdbinit' должен находиться в рабочем каталоге GDB (скорее всего, это корневой каталог ваших проектов, но ваша IDE может сообщить вам.

3) Откройте Eclipse.(или другой IDE) диалог настроек.Перейдите в подменю C ++ Debugger.

4) Настройте Eclipse для использования C:\MinGW\bin\gdb-python27.exe в качестве отладчика и вашего .gdbinit в качестве файла конфигурации.

5a) Повторно создайте все свои конфигурации запуска отладки (удалите старую и создайте новую с нуля).

--OR--

5b) Отредактируйте каждую конфигурацию отладки и укажите ее нановый gdb-python.exe и укажите его на.

Если у вас возникнут проблемы:

- не забудьте изменить местоположение на каталог python в приведенном выше коде python!Этот каталог создан MinGW, так что не стоит загружать красивые принтеры, MinGW сделал это для вас на нулевом этапе.Просто перейдите к директору установки MinGW, общей папке, папке GCC (имеет номер версии), и вы найдете папку python.Это местоположение должно быть в скрипте Python, загружаемом GDB.

- Кроме того, .gdbinit - это PITA, убедитесь, что его имя указано правильно и в рабочей папке GDB, которая не обязательно находится там, где gdb-python.exe находится!Посмотрите на ваш вывод GDB при загрузке GDB, чтобы увидеть, появляется ли a) «python-enabled» во время загрузки и появляются ли выражения в .gdbinit.

- Наконец, у меня было много проблем с системойпеременные.Если python дает вам «ImportError», то, скорее всего, вы не установили PYTHONPATH или PYTHONHOME.

- Каталог с 'gdb-python27' (например, C: \ MinGW \ bin ') также должен быть на вашем пути, и если это так, настройка затмения становится немного приятнее, потому что вы этого не делаетенужно поставить в абсолютных путях.Но все же иногда .gbdinit нужен абсолютный путь.если это работает, вы увидите вывод из gbd (console-> gdb traces), как это при запуске отладчика:

835,059 4^done
835,059 (gdb) 
835,059 5-enable-pretty-printing
835,069 5^done
....
835,129 12^done
835,129 (gdb) 
835,129 13source C:\MinGW\bin\.gdbinit
835,139 &"source C:\\MinGW\\bin\\.gdbinit\n"
835,142 13^done
835,142 (gdb) 
2 голосов
/ 29 августа 2014

Если вы следуете за принятым ответом и UPDATE2 и GDB получает ошибку, подобную этой:

Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "/usr/share/gcc-4.8/python/libstdcxx/v6/printers.py", line 54
    raise ValueError, "Cannot find type %s::%s" % (str(orig), name)
                ^
SyntaxError: invalid syntax
/home/[you]/.gdbinit:6: Error in sourced command file:
Error while executing Python code.

Это потому, что ваша версия GDB использует Python 3 (подтвердите с помощью этот ответ )

Обходной путь для этой проблемы объяснен здесь

В качестве альтернативы, следуйте инструкциям, чтобы получить исходный код из svn: //gcc.gnu.org, совместимого с Python 3

1 голос
/ 13 февраля 2011

для отображения объектов STL в Eclipse CDT, я делаю это, и он отлично работает:

http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF

(вариант № 2 в отправленной вами ссылке)

Надеюсь, это поможет

...