J'essaye de déboguer un programme qui n'a aucun code source disponible, et j'ai besoin de regarder ce qu'il a stocké dans une chaîne std :: string. J'ai étudié Google et regardé ici, et j'ai trouvé quelques informations sur la sortie des conteneurs STL, mais tout cela se réfère à des variables, sans source ou informations de débogage tout ce que j'ai est un décalage de mémoire des données de classe. Est-ce qu'il y a un moyen de faire ça?Comment inspecter std :: string dans GDB sans code source?
12
A
Répondre
22
Chaque implémentation std::string
a un pointeur vers les caractères bruts quelque part. Pour g++ 4.x
, ce pointeur est décalé de 0
dans la chaîne.
Si vous savez que la chaîne réside, par ex. 0x7fffffffda88
, puis
print *(char**)0x7fffffffda88
est ce dont vous avez besoin.
5
Peut-être la meilleure option est d'utiliser la méthode c_str
, comme dans:
print myStr.c_str()
Questions connexes
- 1. initialisation std :: string de char * sans copie
- 2. Comment inspecter 'super' lors du débogage objc dans gdb
- 3. Comment mapper 2 tableaux char * directement dans std :: map <std :: string, std :: string>
- 4. std :: vector <std::string> crash
- 5. C++ différence entre std :: string nom et std :: string & name
- 6. C++ std :: string et string
- 7. C++ std :: string Code InputIterator en C code
- 8. comment convertir std :: string QString
- 9. Pourquoi std :: string :: max_size() == std :: string :: allocator :: max_size()
- 10. comment imprimer la valeur std :: map dans gdb
- 11. Comment utiliser std :: string avec asio :: buffer()
- 12. convertir xchar * std :: string
- 13. erreur C2440: '=': impossible de convertir 'std :: string []' en 'std :: string []'
- 14. std :: string s = (std :: string) "a" + "b" + "c"; D'accord?
- 15. #define Glib :: string std: wstring
- 16. Supprimer les NULL de std :: string
- 17. std :: string :: longueur() par rapport à std :: string :: size()
- 18. Comment std :: string surcharge l'opérateur d'affectation?
- 19. char * to std :: string
- 20. std :: string à LPOLESTR
- 21. ctypes python std :: string
- 22. Crash initialisant std :: String
- 23. std :: string + = opérateur
- 24. std :: string à int8_t
- 25. erreur avec std :: ostringsteam et std :: string
- 26. C++ std :: string to boolean
- 27. std :: string x (x);
- 28. LPWSTR vers std :: string?
- 29. inspecter le code natif
- 30. en utilisant std :: find_if avec std :: string
Merci, qui a travaillé. Une chose que j'aimerais savoir, c'est comment je pourrais imaginer quelque chose comme ça par moi-même. c'est-à-dire donné le code source de la classe 'X' comment est-ce que je trouverais la position des champs dans cette classe? La seule façon dont je peux penser en ce moment est de compiler ma propre application de test et d'examiner les pointeurs que je reçois (avec offsetof, etc.). – PeterBelm
Le moyen le plus rapide de comprendre le décalage est en fait de compiler un programme de test trivial utilisant la classe donnée en mode débogage, et d'examiner les offsets et la disposition des classes dans GDB. C'est exactement ce que j'ai fait pour répondre à votre question ;-) –
En passant, si SSO est utilisé comme dans libC++ de clang, il n'y a pas de tel pointeur pour les petites chaînes. ;-) – Deduplicator