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