Управление выходом отладчика Eclipse CDT? - PullRequest
8 голосов
/ 17 ноября 2008

При использовании CDT я хотел бы, чтобы std :: string отображался в окне отладки 'variable' со строкой, которую он содержит. Например, если в данный момент в нем содержится слово «история» , я бы хотел видеть историю в окне отладчика с пометкой «переменные».

Я думаю, что есть общий способ развернуть его в объекты, но я не могу указать на это. Кто-нибудь знает, как это сделать?

Это также было бы полезно для меня при выводе только одного поля из сложного объекта.

Спасибо, Билл

Ответы [ 6 ]

22 голосов
/ 26 января 2009

Отображение контейнеров stl с eclipse / gdb также было для меня долгой болью в течение долгого времени.

Но теперь я только что обнаружил, что последняя версия GDB с включенным Python может помочь с этим.

Это следует тому, что я сделал (используя Ubuntu Linux 8.10):

  • Установить версию gdb> = 6.8.50 (например, из экспериментального Debian )
  • Создайте файл с именем .gdbinit в корневом каталоге вашего проекта со следующим содержимым:

    импорт python gdb.libstdcxx.v6.printers

Теперь контейнеры stl будут довольно напечатаны .

Если вы хотите проверить, включен ли у вас gdb с поддержкой Python (или сработала ли ваша новая установка):

  • Запуск GDB из консоли
  • В приглашении GDB выполните следующее

    (gdb) python print 'Python с поддержкой Python работает!'

  • Если приведенная выше команда производит то, что мы ожидаем, значит, она работает.

Для более подробной информации проверьте этот блог .

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

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

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

0) Если у вас нет Python GDB, откройте оболочку / команду и используйте 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). Перейдите в подменю 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) 
1 голос
/ 18 сентября 2011

Windows 7

Получить красивые принтеры: svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

Настройте затмение с помощью: Отладка C / C ++ GDB:

C:\MinGW\bin\gdb-python27.exe
C:\MinGW\bin\.gdbinit
1 голос
/ 17 ноября 2008

Обратите внимание, что вы не хотите использовать общий способ детализации объектов; Вы хотите красиво печатать контейнеры STL.

Я думаю, что CDT делегирует это бэкенду отладчика; т. е. от вашего отладчика (возможно, gdb?) зависит CDT о значении переменной и о том, как ее можно расширить.

Редактировать: Я не думаю, что серверная часть GDB, поставляемая с CDT, имеет какую-либо поддержку "интеллектуального" отображения контейнеров STL. Если вы действительно заинтересованы в этом, я бы предложил вам связаться с командой разработчиков CDT по адресу cdt-dev@eclipse.org.

Обновление / редактирование: см. Другие ответы ниже для получения инструкций о том, как включить симпатичные принтеры в CDT.

0 голосов
/ 23 февраля 2009

billcoke Ваш лучший способ - использовать некоторые макросы GDB, которые вы можете набрать в консоли GDB, которые можно открыть в окне Console / Debugger в eclipse. Вы можете найти их здесь: http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.01.txt

это не будет автоматическим при наведении, но вы должны печатать, что утомительно ... но даже в 2009 году eclipse CDT не удалось принести нам некоторые хорошие функции отладки, так что это ваш лучший выстрел. 1004 *

TO RPSENG: спасибо за отзыв rpseng! это работает хорошо! к сожалению, кажется, что мое затмение (Ганимед) настолько запутано, что больше не обнаружит тип указателей на экземпляры моих собственных классов и их наследование, поэтому переход через переменные-члены этих указателей больше невозможен. Вы работаете с CDT 6.0 и там лучше работает?

0 голосов
/ 14 января 2009

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

  1. В окне Debug нажмите gdb . Это чуть ниже трассировки стека.
  2. В окне Console используйте команду GDB up, чтобы перейти к желаемому фрейму стека
  3. Снова в окне Console , используйте команду print, чтобы отобразить std::string переменная:

    p mystring

Но это много проблем.

Что-то, что я заметил, это то, что при наведении курсора на переменную отображаются поля std :: string, но они усекаются, поэтому я не вижу наиболее интересной части: строкового значения. Возможно, есть способ увеличить максимальную длину отображаемого значения.

...