Gdb pretty printer não está funcionando no Ubuntu 16.04

0

Eu depurei códigos C ++ usando o gdb no Ubuntu 14.04. Quando eu passo um contêiner stl para o comando print, é usado para imprimir o conteúdo do contêiner. Mas então eu atualizei para o Ubuntu 16.04 LTS uma semana atrás. Agora essas impressoras bonitas não estão funcionando. Quando eu os imprimo, recebo a saída do contêiner bruto que você obtém quando não tem impressoras python instaladas.

Eu tenho libstdcxx/v6/python.py no meu sistema. Eu também tenho libstdc++.so.6.0.21-gdb.py na pasta de carregamento automático. Quando imprimo info pretty-printer no gdb, eu recebo uma lista de impressoras stl, então eu sei que elas estão registradas. No entanto, meu gdb não imprime a variável std::list . Eu habilitei pretty-printer, configurei print bem.

Minha versão gcc é 5.4 e a versão gdb é 7.11.1. Ambas foram instaladas junto com o Ubuntu 16.04. Eu não os construí manualmente. Então, qualquer coisa óbvia que eu esteja sentindo falta?

    
por ajith.mk 30.09.2016 / 09:02

1 resposta

0

Parece que, com a nova versão libstdcxx, os contêineres (alguns deles?) são movidos para o espaço std :: __cxx11 :: name e a correspondência de padrões existente da impressora bonita existente não corresponde mais. O patch seguinte adiciona esse padrão e o corrige para mim.

*** /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):                                                                                                                                         
    
por hshib 09.11.2016 / 00:52

Tags