Creating C++ string in GDB

后端 未结 3 1890
我寻月下人不归
我寻月下人不归 2020-12-09 02:55

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:

相关标签:
3条回答
  • 2020-12-09 03:07

    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)
    
    0 讨论(0)
  • 2020-12-09 03:09

    GDB cannot really do what you describe. Your case involves:

    1. instantiating a basic_string template and generating code for the class
    2. generate a call to constructor

    This 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.

    0 讨论(0)
  • 2020-12-09 03:09

    What do you mean by "creating"? GDB doesn't persist C++ objects (your application does that), so you can't create a C++ object in GDB itself.

    However, you should be able to call specific function of your application from GDB.

    0 讨论(0)
提交回复
热议问题