I'm having trouble creating an std::string
(or any C++ object, I guess) in GDB. I tried lots of variations to the following and none of them seem to work:
(gdb) p std::string("hello") A syntax error in expression, near `"hello")'.
Is there a way to do it?
(I'm surprised I couldn't find anything about this on the Web. I'm starting to think if my GDB is buggy or I'm doing something very wrong.)
You should be able to construct a new std::string within the GDB. You want to allocate space on the heap to hold the std::string object, invoke the default constructor, and assign your string value. Here is an example:
(gdb) call malloc(sizeof(std::string)) $1 = (void *) 0x91a6a0 (gdb) call ((std::string*)0x91a6a0)->basic_string() (gdb) call ((std::string*)0x91a6a0)->assign("Hello, World") $2 = (std::basic_string<char, std::char_traits<char>, std::allocator<char> > &) @0x91a6a0: {static npos = <optimized out>, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x91a6f8 "Hello, World"}} (gdb) call SomeFunctionThatTakesAConstStringRef(*(const std::string*)0x91a6a0)
GDB cannot really do what you describe. Your case involves:
basic_string
template and generating code for the classThis means it must do the work of the same complexity as a compiler. This is not the job of the debugger.
With that said, GDB is capable of evaluating a limited subset of statements, like calling an existing function with existing data and retrieving its result, since this won't involve generating a lot of code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With