2017-09-08 2 views
-2

Je débogue un noyau en utilisant gdb. J'essaye d'imprimer quelques cartes dans le cadre. Les cartes contiennent des pointeurs vers des structures comme leur valeur. Cependant, certaines cartes sont mal imprimées tandis que d'autres sont imprimées correctement.Gdb n'imprime pas les pointeurs correctement à partir d'une carte STL

Eg: 
map1 < int, void* > 
map2 < int, A* > 

gdb> pmap map1 
10 0x7f2bbec0f4e0 

gdb> pmap map2 
20 0x7f2bbec00000 

Pourquoi les pointeurs de map2 sont-ils imprimés incorrectement?

Répondre

2

Il n'y a pas de commande GDB pmap. Vous utilisez peut-être des stlviews obsolètes, comme this.

Les distributions GDB modernes sont fournies avec de jolies imprimantes Python, qui peuvent imprimer des cartes très bien. Essayez p map1 et p map2 à la place.

Pourquoi les pointeurs de map2 sont-ils imprimés incorrectement?

Vous n'avez montré aucune preuve que map2 n'est pas imprimé correctement. Pour tout ce que nous savons, il contient un seul élément 20, 0x7f2bbec00000.

P.S. Cela ressemble bogus:

map1 < int, void* > 
map2 < int, A* > 

Qu'est-ce que vous voulez dire sans doute est:

std::map<int, void*> map1; 
std::map<int, A*> map2; 

À l'avenir, vous obtiendrez des réponses plus utiles si vous montrez code réel, et non une interprétation incorrecte de celui-ci.