Как включить 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 в указанной вами ссылке)
Надеюсь, что это поможет