Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to inspect std::string in GDB with no source code?

I'm trying to debug a program that has no source code available, and I need to look at what it has stored in a std::string. I've been Googling and looking on here, and I've found some information about outputting STL containers, but all of it refers to variables, with no source or debug information all I have is a memory offset of the class data. Is there any way to do this?

like image 440
PeterBelm Avatar asked Jul 21 '11 13:07

PeterBelm


People also ask

Which command in GDB is used to find the type of variable?

The ptype [ARG] command will print the type.

What is print command in GDB?

The usual way to examine data in your program is with the print command (abbreviated p ), or its synonym inspect . It evaluates and prints the value of an expression of the language your program is written in (see section Using GDB with Different Languages).


2 Answers

Every std::string implementation has a pointer to the raw characters in it somewhere. For g++ 4.x, that pointer is at offset 0 into the string.

If you know that the string resides at e.g. 0x7fffffffda88, then

print *(char**)0x7fffffffda88

is what you need.

like image 197
Employed Russian Avatar answered Oct 18 '22 23:10

Employed Russian


Perhaps the easiest option is to use the c_str method, as in:

print myStr.c_str()
like image 30
Nadav Avatar answered Oct 18 '22 23:10

Nadav