Como habilitar a impressão bonita do gdb para objects C ++ STL no Eclipse CDT?

Eu estou tentando adicionar impressão bonita para objects STL no eclipse cdt. Eu tentei seguir os passos descritos aqui:

http://sourceware.org/gdb/wiki/STLSupport

Eu verifiquei a pasta python, mas não consigo fazer isso …

Eu criei um gdbinit e selecionei minha configuração de debugging, mas sempre que tento iniciar a debugging, recebo o seguinte erro:

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) 

Se eu tentar executar o conteúdo do gdbinit em um shell python, recebo este erro:

 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 "", line 1, in  ImportError: No module named libstdcxx.v6.printers 

Parece que eu não tenho esse módulo … Eu não tenho a menor idéia sobre o Python, então eu nem sei o que é um “módulo” no Python ….

Alguém pode me ajudar com isso? É muito importante que eu consiga ver informações de debugging reais ou seja útil colocá-las dessa forma. Ou, de alguma forma, eu posso depurar até mesmo do console e obter uma boa saída do gdb, porque se eu for imprimir uma string, por exemplo, recebo uma saída inútil ….

Atenciosamente, Alex

Essa é a solução que funciona para mim.

Faça o download ( http://www.gnu.org/software/gdb/download/ ) e instale o gdb mais recente (ou seja, com –prefix $ HOME). Suporta scripts python.

Obter impressoras bonitas do python executando

svn co svn: //gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python

em um diretório de sua escolha (ou seja, $ (HOME) / distribs / gdb_printers). Você obterá o subdiretório ‘python’ no diretório de checkout.

Coloque isso no seu arquivo $ (HOME) /. Gdbinit com o caminho correto para impressoras bonitas:

 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 

Isso faz com que a impressão seja utilizável através da interface de linha de comando do gdb ( >(gdb) p my_std_string ).

Em seguida, explica o uso durante a debugging no Eclipse.

Faça o download ( http://download.eclipse.org/eclipse/downloads/ ) da última geração do Stream Stable ou Release do Eclipse (versão> = 3.7).

Faça o download ( http://download.eclipse.org/tools/cdt/builds/8.0.0/index.html para Eclipse Indigo ou http://www.eclipse.org/cdt/downloads.php para Eclipse Juno) mais recente Eclipse Ferramentas de desenvolvimento C / C ++ (Eclipse CDT).

Execute o Eclipse e escolha o diretório da área de trabalho onde suas opções serão armazenadas (por exemplo, $ HOME / projects). Clique em Ajuda-> Instalar Novo Software … Clique em Adicionar …-> Arquivar … e escolha a compilation do CDT que você acabou de baixar. Então você deve escolher os componentes a serem instalados: clique em Recursos Principais do CDT -> Ferramentas de Desenvolvimento C / C ++ (e possivelmente outros componentes de sua escolha). Em seguida, continue com a instalação e reinicie o Eclipse.

Especifique a localização correta do gdb e do .gdbinit no Eclipse e verifique se a opção Pretty Printing está habilitada:

 Window -> preferences -> C/C++ -> Debug -> GDB 

Agora você pode ver os contêineres STL impressos em modo de exibição Variáveis ​​durante a debugging no Eclipse.

Outros comandos podem ser usados ​​para tornar a saída do gdb mais decente:

 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 

ATUALIZAÇÃO: Quanto a fazer com que funcione para projetos antigos, consulte o ponto 4) em rustyx answer below.

UPDATE2: o ubuntu 12.04 possui o libstdc ++ 6-4.6-dbg que instala o módulo /usr/share/gcc-4.6/python/libstdcxx/ python para você

Eu sei que isso não responde a pergunta original, mas eu pensei que poderia ser útil para quem depurar no Eclipse no Windows / MinGW . O procedimento para o Windows é semelhante:

1) Obtenha o Python 2.7.x em http://python.org/download/

2) Crie .gdbinit algum lugar contendo algo como isto:

 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 

3) Configure o Eclipse CDT para usar o C:\MinGW\bin\gdb-python27.exe como o depurador e seu .gdbinit como o arquivo de configuração.

4) Recrie sua session de boot de debugging (exclua a antiga e crie uma nova do zero).

Eu gostaria de expandir a resposta do Windows 7 porque algumas etapas-chave foram deixadas de fora:

Isto é para usuários do MinGW com o Eclipse CDT

0) Se você não tiver o python GDB, abra um shell / comando e use o MinGW-get.exe para ‘instalar’ o GDB habilitado para Python, por exemplo

  MinGw-get.exe install gdb-python 

1a) Obtenha o Python 2.7.x em http://python.org/download/ e instale

1b) Certifique-se de que PYTHONPATH e PYTHONHOME estejam configurados em seu ambiente:

  PYTHONPATH should be C:\Python27\Lib (or similar) PYTHONHOME should be C:\Python27 

1c) Adicione PYTHONHOME ao seu PATH

  %PYTHONHOME%;... 

2a) Abra um texto, insira as seguintes declarações. Observe que a terceira linha está apontando para onde os scripts python estão localizados. Veja as notas abaixo sobre isso!

 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 

2b) Salvar como ‘.gdbinit’ NOTA: O Windows Explorer não permitirá que você nomeie um arquivo que comece com um ponto do explorador. A maioria das edições de texto (incluindo o bloco de notas) permite que você. Os arquivos init do GDB são como ‘scripts’ de comandos do GDB que o GBD executará ao carregar.

2c) O arquivo ‘.gdbinit’ precisa estar no diretório de trabalho do GDB (provavelmente este é o diretório raiz do seu projeto, mas o seu IDE pode lhe dizer.

3) Abra sua checkbox de diálogo Preferências do Eclipse (ou outro IDE). Vá para o submenu Depurador do C ++.

4) Configure o Eclipse para usar o C:\MinGW\bin\gdb-python27.exe como o depurador e seu .gdbinit como o arquivo de configuração.

5a) Recrie todas as suas configurações de boot de debugging (exclua a antiga e crie uma nova do zero).

 --OR-- 

5b) Edite cada configuração de debugging e aponte-a para o novo gdb-python.exe E aponte-a para o.

Se você tiver problemas:

– Não se esqueça de mudar o local para o diretório python no código python acima! Este diretório é criado pelo MinGW, então não tente baixar as impressoras bonitas, o MinGW fez isso para você no passo zero. Basta ir ao seu diretor de instalação do MinGW, à pasta de compartilhamento, à pasta do GCC (tem o número da versão) e você encontrará a pasta python. Este local é o que deve estar no script python carregado pelo GDB.

–Além disso, o .gdbinit é um PITA, certifique-se do seu nome corretamente e na pasta de trabalho do GDB que não é necessariamente onde o gdb-python.exe está localizado! Observe a saída do GDB ao carregar o GDB para ver se a) ‘python-enabled’ aparece durante o carregamento e se as instruções no .gdbinit estão aparecendo.

– Finalmente, eu tive muitos problemas com as variables ​​do sistema. Se python lhe der ‘ImportError’, provavelmente você não configurou PYTHONPATH ou PYTHONHOME.

–O diretório com ‘gdb-python27’ (por exemplo, C: \ MinGW \ bin ‘) também deve estar no seu caminho e, se estiver, torna a configuração do eclipse um pouco melhor porque você não precisa colocar caminhos absolutos . Mas ainda assim, às vezes o .gbdinit precisa de um caminho absoulte. se funcionar, você verá a saída de gbd (console-> gdb traces) assim na boot do debugger:

 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) 

Se você seguir a resposta aceita e UPDATE2 e o gdb receber um erro como este:

 Traceback (most recent call last): File "", line 3, in  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. 

É porque sua versão do gdb está usando o Python 3 (confirme com essa resposta )

Uma solução alternativa para esse problema é explicada aqui

Alternativamente, siga as instruções para obter a fonte do svn: //gcc.gnu.org, que é compatível com o Python 3

para exibir objects STL no Eclipse CDT, eu faço isso e funciona bem:

http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF

(opção número 2 no link que você enviou)

Espero que isto ajude