Включить красивую печать в Eclipse C ++ - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь включить симпатичную печать для STL в Eclipse.Это мои версии:

  • Версия Eclipse: 2018-09 (4.9.0)
  • gdb 7.11.1
  • Xubuntu 16.04
  • gcc7.4.0
  • g ++ 7.4.0

Я прочитал различные руководства, и именно это я и сделал (я скопировал ответы из других SO qns):

ШАГ 1: Загрузите симпатичные принтеры:

$ cd /home/ali/Downloads
$ svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

ШАГ 2: Отредактируйте gdbinit

$ subl /home/ali/.gdbinit

Вставьте следующее в .gdbinit:

python
import sys
sys.path.insert(0, '/home/ali/Downloads/python/')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

У меня также естьпопробовал тот, который поставляется с gcc, то есть:

sys.path.insert(0, '/usr/bin/gcc-8/python')

Кроме того, я добавил строки в printers.py:

if length > 100: length = 100

ШАГ 3: Настройка Eclipse

В настройках GDB для Eclipse (Window-> Preferences-> C / C ++ -> Debug-> GDB) укажите путь к командному файлу GDB для только что созданного файла .gdbinit.Кроме того, на той же вкладке установите флажок Pretty Printing.

Для любых существующих конфигураций отладки (Run-> Debug Configurations), которые требуют Pretty-Printing, выберите конфигурацию отладки, затем задайте путь к файлу команды GDBна вкладке «Отладчик».

ШАГ 4: Тестирование GDB

Вы можете проверить, что GDB печатает довольно-таки, следующим образом (как только первые два шага предыдущей процедуры были выполнены):

Сохраните следующий код в файле с именем test.cpp:

#include <map>
int main() {
std::map<char, int> first;
first['a'] = 10;
first['b'] = 20;
}

Скомпилируйте с g ++:

$ g++ -g -o test test.cpp

Запустите gdb:

$ gdb test

Установите точку останова:

(gdb) b test.cpp:5

Будет выведено:

Breakpoint 1 at 0x40093f: file src/test.cpp, line 5.

Запустите программу:

(gdb) run
Starting program: /path/to/test

Когда достигнута точка останова, приглашение gdbбудет отображаться.Распечатайте карту с помощью следующей команды:

(gdb) p first

Если все хорошо, вы должны увидеть следующий вывод:

$1 = std::map with 1 elements = {[97 'a'] = 10}

Я все еще не получаю симпатичную печать в Eclipse (его работанормально использовать gdb в Терминале):

seq_of_probs = {<No data fields>}}
Default:{...}
Decimal:{...}
Hex:{...}
Binary:{...}
Octal:{...}

где seq_of_probs имеет тип std::vector<std::string>

Может кто-нибудь предложить какие-либо шаги, которые отсутствуют или неправильны?Я пытался в течение дня.

Вещи из моего разума:

Имеет ли значение DSF-GDB или CDI-GDB?Я не знаю, какой мой Eclipse использует.

В Eclipse мой отладчик gdb по умолчанию - gdb.Я изменил его на usr / bin / gdb.В любом случае, оба не работали.

GDB, который использует мой Eclipse, поддерживает Python?Моя версия GDB должна быть с поддержкой Python.Или есть другой двоичный файл для этого?

Редактировать:

Теперь я получаю эту ошибку:

Сообщено о нескольких ошибках.

1) Не удалось выполнитьКоманда MI:

-var-create - * state
Error message from debugger back end:
Cannot instantiate printer for default visualiser

2) Невозможно создать переменный объект

3) Не удалось выполнить команду MI:

-var-create - * state
Error message from debugger back end:
Cannot instantiate printer for default visualiser

Состояние - вектор.

ОБНОВЛЕНИЕ:

Так что я думаю, что в Eclipse работает красивая печать, когда я использую gcc 4.8 и g ++ 4.8.Вот что я получил:

Name : test
Details:std::vector of length 3, capacity 4 = {1, 2, 3}
Default:{...}
Decimal:{...}
Hex:{...}
Binary:{...}
Octal:{...}

Name : [0]
Details:N/A (child of pretty-printed object)
Default:1
Decimal:1
Hex:0x1
Binary:1
Octal:01

Я надеюсь, что это даст дополнительные подсказки к тому, что нужно исправить.Есть идеи?

...