как включить симпатичную печать gdb для объектов c ++ stl в eclipse cdt?

<p>я пытаюсь добавить красивую печать для объектов stl в eclipse cdt. я попытался выполнить шаги, описанные здесь:</p><p> <a href="http://sourceware.org/gdb/wiki/stlsupport">http://sourceware.org/gdb/wiki/stlsupport</a> </p><p>я проверил папку python, но не могу этого сделать ...</p><p>я создал gdbinit и выбрал для своей конфигурации отладки, но всякий раз, когда я пытаюсь начать отладку, я получаю следующую ошибку:</p><pre><code>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) </code></pre><p>если я пытаюсь выполнить содержимое gdbinit в оболочке python, я получаю эту ошибку:</p><pre><code>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 </code></pre><p>кажется, у меня нет такого модуля ... я не имею понятия о python, поэтому я даже не знаю, что такое "модуль" в python ....</p><p>может ли кто-нибудь помочь мне с этим? для меня очень важно иметь возможность видеть реальную отладочную информацию или полезно выразить это так. или каким-то образом я могу отладить даже из консоли и получить хороший вывод из gdb, потому что, если я иду печатать строку, например, я получаю бесполезный вывод ....</p><p>с уважением, алекс</p>

<p>это решение, которое работает для меня.</p><p>загрузите ( <a href="http://www.gnu.org/software/gdb/download/">http://www.gnu.org/software/gdb/download/</a> ) и установите последнюю версию gdb (т.е. с --prefix $ home). он поддерживает python скрипты.получить python красивые принтеры, выполнив<blockquote>svn co svn: //gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python</blockquote>в каталоге по вашему выбору (например, $ (home)/distribs/gdb\_printers). вы получите подкаталог "python" в каталоге оформления заказа.</p><p>поместите это в ваш файл $ (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.загрузите ( <a href="http://download.eclipse.org/eclipse/downloads/">http://download.eclipse.org/eclipse/downloads/ ) последнюю версию стабильной сборки или выпуска eclipse (> = 3.7 версия).скачать ( <a href="http://download.eclipse.org/tools/cdt/builds/8.0.0/index.html">http://download.eclipse.org/tools/cdt/builds/8.0.0/index.html для eclipse indigo или <a href="http://www.eclipse.org/cdt/downloads.php">http://www.eclipse.org/ cdt/downloads.php для eclipse juno) новейшие инструменты разработки eclipse c/c++ (eclipse cdt).запустите eclipse и выберите каталог рабочей области, в котором будут храниться ваши параметры (например, $ home/projects). нажмите справка-> установить новое программное обеспечение ... нажмите добавить ...-> архивировать ... и выберите сборку cdt, которую вы только что загрузили. затем вы должны выбрать компоненты для установки: щелкните основные функции cdt -> инструменты разработки c/c++ (и, возможно, другие компоненты по вашему выбору). затем продолжите установку и перезапустите eclipse.</p><p>укажите правильное расположение gdb и .gdbinit в eclipse и убедитесь, что опция pretty printing включена:</p><pre><code>window -> preferences -> c/c++ -> debug -> gdb </code></pre><p>теперь вы можете видеть контейнеры stl, хорошо напечатанные в представлении variables во время отладки в eclipse.</p><p>другие команды могут использоваться, чтобы сделать вывод gdb более приличным:</p><pre><code>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 </code></pre><p>обновление: относительно того, как заставить его работать для старых проектов, см. пункт 4) в ответе rustyx ниже.</p><p>обновление 2: в ubuntu 12.04 есть libstdc ++ 6-4.6-dbg, который устанавливает для вас модуль /usr/share/gcc-4.6/python/libstdcxx/ python</p>

<p>я знаю, что это не отвечает на первоначальный вопрос, но я подумал, что это может быть полезно для тех, кто отлаживает в eclipse на <strong> windows/mingw </strong>. процедура для windows похожа:</p><p>1) получить python 2.7.x из <a href="http://python.org/download/">http://python.org/download/</a> </p><p>2) создайте <code>.gdbinit</code> где-нибудь, например:</p><pre><code>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 </code></pre><p>3) настройте eclipse cdt для использования <code>c:\mingw\bin\gdb-python27.exe</code> в качестве отладчика и вашего <code>.gdbinit</code> в качестве файла конфигурации.</p><p>4) повторно создайте сеанс запуска отладки (удалите старый и создайте новый с нуля).</p>

<p>я хотел бы расширить ответ windows 7, потому что некоторые ключевые шаги не учтены:</p><h1>это для пользователей mingw с eclipse cdt</h1><p>0) если у вас нет python gdb, откройте shell/команду и используйте mingw-get.exe для "установки" python с поддержкой python, например.</p><pre><code> mingw-get.exe install gdb-python </code></pre><p>1a) получить python 2.7.x из <a href="http://python.org/download/">http://python.org/download/</a> и установить</p><p>1b) убедитесь, что pythonpath и pythonhome установлены в вашей среде:</p><pre><code> pythonpath should be c:\python27\lib (or similar) pythonhome should be c:\python27 </code></pre><p>1c) добавьте pythonhome в свой путь</p><pre><code> %pythonhome%;... </code></pre><p>2a) откройте текстовый ввод, введите следующие утверждения. обратите внимание, что 3-я строка указывает, где находятся сценарии python. смотрите примечания ниже об этом!</p><pre><code>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 </code></pre><p>2b) сохранить как ".gdbinit" примечание. проводник windows не позволит вам назвать файл, который начинается с точки из проводника. большинство текстовых правок (включая блокнот) позволит вам. файлы инициализации gdb похожи на "сценарии" команд gdb, которые gbd будет выполнять при загрузке.</p><p>2c) файл '.gdbinit' должен находиться в рабочем каталоге gdb (скорее всего, это корневой каталог ваших проектов, но ваш ide может вам это сказать.</p><p>3) откройте диалоговое окно настроек eclipse (или другой ide). перейдите в подменю c++ debugger.</p><p>4) настройте eclipse для использования <code>c:\mingw\bin\gdb-python27.exe</code> в качестве отладчика и вашего <code>.gdbinit</code> в качестве файла конфигурации.</p><p>5a) повторно создайте все свои конфигурации запуска отладки (удалите старую и создайте новую с нуля).</p><pre><code>--or-- </code></pre><p>5b) отредактируйте каждую конфигурацию отладки и укажите ее на новый gdb-python.exe и укажите на.</p><h2>если вы столкнулись с проблемами:</h2><p>- не забудьте изменить местоположение на каталог python в приведенном выше коде python! этот каталог создан mingw, так что не стоит загружать красивые принтеры, mingw сделал это для вас на нулевом этапе. просто перейдите к директору установки mingw, общей папке, папке gcc (с номером версии), и вы найдете папку python. это местоположение должно быть в скрипте python, загружаемом gdb.</p><p>- также .gdbinit - это pita, убедитесь, что он правильно назван и находится в рабочей папке gdb, которая не обязательно находится там, где находится gdb-python.exe! посмотрите на ваш вывод gdb при загрузке gdb, чтобы увидеть, появляется ли a) "python-enabled" во время загрузки и появляются ли операторы в .gdbinit.</p><p>- наконец, у меня было много проблем с системными переменными. если python дает вам "importerror", то, скорее всего, вы не установили pythonpath или pythonhome.</p><p>- каталог с 'gdb-python27' (например, c:\mingw\bin ') также должен быть на вашем пути, и если он есть, то это делает настройку eclipse немного лучше, потому что вам не нужно указывать абсолютные пути , но все же иногда .gbdinit нужен абсолютный путь. если это работает, вы увидите вывод из gbd (console-> gdb traces), например, при запуске отладчика:</p><pre><code>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) </code></pre>

<p>если вы выполните <a href="https://stackoverflow.com/a/5713387/463138">принятый ответ</a> и update2, и gdb получит ошибку, подобную этой:</p><pre><code>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. </code></pre><p>это потому, что ваша версия gdb использует python 3 (подтвердите с помощью <a href="https://askubuntu.com/a/382800/23577">этот ответ</a> )</p><p>обходной путь для этой проблемы объясняется <a href="https://bugs.launchpad.net/ubuntu/+source/gdb/+bug/1258642/comments/3">здесь</a> </p><p>кроме того, следуйте инструкциям, чтобы получить исходный код из svn: //gcc.gnu.org, который совместим с python 3</p>

<p>для отображения объектов stl в eclipse cdt, я делаю это, и он работает нормально:</p><p> <a href="http://www.yolinux.com/tutorials/gdb-commands.html#stlderef">http://www.yolinux.com/tutorials/gdb-commands.html#stlderef</a> </p><p>(вариант № 2 в ссылке, которую вы отправили)</p><p>надеюсь это поможет</p>