Estoy tratando de depurar un programa que no tiene un código fuente disponible, y necesito ver lo que ha almacenado en std :: string. He estado buscando en Google y mirando aquí, y he encontrado algo de información sobre la salida de contenedores STL, pero todo se refiere a variables, sin información de fuente o de depuración, todo lo que tengo es una compensación de memoria de los datos de clase. ¿Hay alguna manera de hacer esto?Cómo inspeccionar std :: string en GDB sin código fuente?
12
A
Respuesta
22
Cada implementación de std::string
tiene un puntero a los caracteres en bruto en algún lugar. Para g++ 4.x
, ese puntero está en el desplazamiento 0
en la cadena.
Si sabe que la cadena se encuentra, p. 0x7fffffffda88
, entonces
print *(char**)0x7fffffffda88
es lo que necesita.
5
Quizás la opción más sencilla es utilizar el método c_str
, como en:
print myStr.c_str()
Cuestiones relacionadas
- 1. Estableciendo un valor de variable std :: string de gdb?
- 2. Cómo convertir System :: String^en std :: string?
- 3. SWIG: Cómo ajustar std :: string & (std :: string pasado por referencia)
- 4. inicializar std :: string de char * sin copia
- 5. Cómo convertir caracteres sin signo * a std :: string en C++?
- 6. std :: string :: longitud() vs. std :: string :: size()
- 7. std :: vector <std::string> crash
- 8. Cómo invertir una std :: string?
- 9. Como inspeccionar 'super' al depurar objc en GDB
- 10. cómo imprimir el valor de std :: map en gdb
- 11. Definir std :: string en C++ sin caracteres de escape
- 12. Convertir std :: string en QString
- 13. inspeccionar el código nativo
- 14. ¿Cómo puedo tomar posesión de un C++ std :: string char data sin copiar y mantener el objeto std :: string?
- 15. Convierte uint64_t en std :: string
- 16. Cómo INSERTAR binary std :: string en BLOB
- 17. Obtenga bytes de std :: string en C++
- 18. Cómo convertir std :: string a NSString?
- 19. std :: string :: assign() causa segfault
- 20. Rendimiento std :: strstr vs std :: string :: encontrar
- 21. Cómo convertir CString y :: std :: string :: std :: wstring entre sí?
- 22. ¿Cómo obtener char sin signo en una std :: string sin reinterpret_cast?
- 23. ¿Cómo pasar una std :: string a glShaderSource?
- 24. std :: string vs. char *
- 25. operator std :: string() const?
- 26. Cómo convertir QString a std :: string?
- 27. Unicode std :: string class replacement
- 28. C++ copy std :: string a char array sin terminación nula
- 29. C++ std :: string to boolean
- 30. Lectura directamente de std :: istream en std :: string
Gracias, que funcionó. Una cosa que me gustaría saber es cómo me imaginaría algo así. es decir, dado el código fuente para la clase 'X', ¿cómo averiguaría la posición de los campos dentro de esa clase? La única forma en que puedo pensar en este momento es compilar mi propia aplicación de prueba y examinar los punteros que se me dan (con offsetof, etc.). – PeterBelm
La manera más rápida de descubrir el desplazamiento es, de hecho, compilar un programa de prueba trivial usando la clase dada en modo de depuración, y examinar los desplazamientos y el diseño de clase en GDB. Eso es exactamente lo que he hecho para responder a tu pregunta ;-) –
Como un aparte, si el SSO se usa como en la libC++ de clang, no existe ese puntero para cadenas pequeñas. ;-) – Deduplicator