it-swarm-ru.tech

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

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

39
AlejandroVK

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

Загрузите ( 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 (> = 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 ниже.

ОБНОВЛЕНИЕ 2: в Ubuntu 12.04 есть libstdc ++ 6-4.6-dbg, который устанавливает для вас модуль /usr/share/gcc-4.6/python/libstdcxx/ python

58
Riga

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

10
rustyx

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

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

0) Если у вас нет python GDB, откройте Shell/команду и используйте 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 в свой путь

 %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 ') также должен быть на вашем пути, и если он есть, то это делает настройку Eclipse немного лучше, потому что вам не нужно указывать абсолютные пути , Но все же иногда .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) 
5
William Symionow

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

2
acel

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

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

(вариант № 2 в ссылке, которую вы отправили)

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

1
Bob Yoplait