Gdb довольно принтер не работает в Ubuntu 16.04

Я отлаживал коды C++ с использованием gdb в Ubuntu 14.04. Когда я передаю контейнер stl команде print, он используется для печати содержимого контейнера. Но затем я обновился до Ubuntu 16.04 LTS неделю назад. Теперь эти красивые принтеры не работают. Когда я их печатаю, я получаю исходный контейнер, который вы получаете, когда у вас не установлены принтеры Python.

я имею libstdcxx/v6/python.py в моей системе. у меня тоже есть libstdc++.so.6.0.21-gdb.py в папке автозагрузки. Когда я печатаю информацию pretty-printer в gdb, я получаю список принтеров stl, поэтому я знаю, что они зарегистрированы. Тем не менее, мой gdb не печатает std::list переменная. Я включил симпатичный принтер, включил режим печати.

мой gcc версия 5.4 и gdb версия 7.11.1. Оба были установлены вместе с Ubuntu 16.04. Я не построил их вручную. Так что-нибудь очевидное, что мне не хватает?

1 ответ

Кажется, что в более новой libstdcxx контейнеры (некоторые из них?) Перемещаются в пространство имен std::__cxx11::, и существующее сопоставление с образцом существующего симпатичного принтера больше не совпадает. Следующий патч добавляет этот паттерн и исправляет его для меня.

*** /usr/share/gcc-5/python/libstdcxx/v6/printers.py.orig       2016-08-08 16:49:58.000000000 +0000                                                                     
--- /usr/share/gcc-5/python/libstdcxx/v6/printers.py    2016-11-08 23:25:23.620557354 +0000                                                                             
***************
*** 1081,1086 ****
--- 1081,1087 ----
      def add_container(self, base, name, function):                                                                                                                    
          self.add_version(base, name, function)                                                                                                                        
          self.add_version(base + '__cxx1998::', name, function)                                                                                                        
+         self.add_version(base + '__cxx11::', name, function)                                                                                                          

      @staticmethod                                                                                                                                                     
      def get_basic_type(type):                                                                                                                                         
Другие вопросы по тегам