Создание строки C ++ в GDB - PullRequest
20 голосов
/ 15 сентября 2011

У меня проблемы с созданием std::string (или любого объекта C ++, я полагаю) в GDB. Я перепробовал множество вариантов, но ни один из них не работает:

(gdb) p std::string("hello")
A syntax error in expression, near `"hello")'.

Есть ли способ сделать это?

(Я удивлен, что ничего не нашел об этом в Интернете. Я начинаю думать, если мой GDB глючит или я что-то делаю очень неправильно.)

Ответы [ 3 ]

26 голосов
/ 03 июля 2012

Вы должны иметь возможность создать новую строку std :: string в GDB. Вы хотите выделить место в куче для хранения объекта std :: string, вызвать конструктор по умолчанию и назначить строковое значение. Вот пример:

(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)
2 голосов
/ 15 сентября 2011

GDB не может действительно делать то, что вы описываете.В вашем случае:

  1. создание шаблона basic_string и генерация кода для класса
  2. генерация вызова для конструктора

Это означает, что он должен делатьработа той же сложности, что и компилятор.Это не работа отладчика.

С учетом сказанного, GDB способен оценивать ограниченное подмножество операторов, например, вызывая существующую функцию с существующими даннымии получение его результата, так как это не потребует генерации большого количества кода.

1 голос
/ 15 сентября 2011

Что вы подразумеваете под «созданием»?GDB не сохраняет объекты C ++ (это делает ваше приложение), поэтому вы не можете создать объект C ++ в самой GDB.

Однако вы должны иметь возможность вызывать определенную функцию вашего приложения из GDB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...