Как включить gdb довольно печатать для объектов STL STL в Eclipse CDT?

Я пытаюсь добавить красивую печать для объектов 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, потому что, если я буду печатать строку, например, я получаю бесполезный вывод....

С уважением, Alex

Ответ 1

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

Скачайте (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 в каталоге checkout.

Поместите это в свой файл $(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 ( >= 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/С++ (Eclipse CDT).

Запустите Eclipse и выберите каталог рабочей области, в котором будут сохранены ваши параметры (т.е. $HOME/projects). Нажмите "Справка" → "Установить новое программное обеспечение"... Нажмите "Добавить...- > Архив..." и выберите созданную CDT-сборку. Затем вы должны выбрать компоненты для установки: нажмите Основные возможности CDT → Инструменты разработки 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 имеет libstdС++ 6-4.6-dbg, который устанавливает/usr/share/gcc-4.6/python/libstdcxx/модуль python для вас

Ответ 2

Я знаю, что это не отвечает на исходный вопрос, но я подумал, что это может быть полезно для тех, кто отлаживает 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) Повторно создайте сеанс запуска отладки (удалите старый и создайте новый с нуля).

Ответ 3

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

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

0) Если у вас нет python GDB, откройте команду shell/command и используйте MinGW-get.exe для установки '  GDB с поддержкой 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 init   файлы похожи на "скрипты" команд GDB, которые GBD будет выполнять при загрузке.

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

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

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

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

--OR--

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

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

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

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

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

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

Ответ 4

Если вы следуете принятому ответу и 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

Ответ 5

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

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

(номер опции 2 в указанной вами ссылке)

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