Supondo que tenha algo assim:
#include <map>
int main(){
std::map<int,int> m;
m[1] = 2;
m[2] = 4;
return 0;
}
Eu gostaria de poder inspecionar o conteúdo do mapa executando o programa do gdb.
Se tento usar o operador subscrito, obtenho:
(gdb) p m[1]
Attempt to take address of value not located in memory.
Usar o método find não produz melhores resultados:
(gdb) p m.find(1)
Cannot evaluate function -- may be inlined
Existe uma maneira de fazer isso?
As respostas existentes para esta pergunta estão muito desatualizadas. Com um GCC e GDB recentes, ele simplesmente funciona TM, graças ao suporte Python integrado no GDB 7.xe às belas impressoras libstdc ++ que vêm com o GCC.
Para o exemplo do OP eu recebo:
Se não funcionar automaticamente para você, veja o primeiro ponto na página de suporte STL do wiki GDB.
Você também pode escrever impressoras bonitas em Python para seus próprios tipos, consulte Pretty Printing no manual do GDB.
fonte
Could not find operator[]
.Sempre há o óbvio: Defina sua própria função de teste ... Chame-a do gdb. Por exemplo:
E:
fonte
A
stl-views.gdb
costumava ser a melhor resposta que havia, mas não mais.Isso não está integrado na linha principal
GDB
ainda, mas aqui é o que se obtém usando o 'arqueiro-tromey-python' ramo :fonte
Tente remover a referência de contêineres STL: nesta página: http://www.yolinux.com/TUTORIALS/GDB-Commands.html
fonte
As respostas acima estão funcionando e bem. Caso você esteja usando stl-views.gdb, aqui está a maneira adequada de visualizar os mapas e elementos dentro dele. Deixe o seu mapa ser o seguinte:
std::map<char, int> myMap;
ou seja,
pmap <variable_name> <left_element_type> <right_element_type>
para ver os elementos no mapa.Espero que ajude.
fonte
Você pode contornar o segundo problema (
Cannot evaluate function -- may be inlined
) certificando-se de que seu compilador usa informações de depuração DWARF-2 (ou 3 ou 4) ao compilar seu programa. DWARF-2 inclui informações embutidas, portanto, você deve ser capaz de usar qualquer um dos métodos descritos para acessar os elementos do seustd::map
contêiner.Para compilar com informações de depuração DWARF-2, adicione o
-gdwarf-2
sinalizador ao seu comando de compilação.fonte