Я пытаюсь отлаживать программу, которая не имеет исходного кода, и мне нужно посмотреть, что она хранила в std::string. Я был Googling и смотрел здесь, и я нашел некоторую информацию о выводе контейнеров STL, но все это относится к переменным, без исходной или отладочной информации, все, что у меня есть, - это смещение памяти данных класса. Есть ли способ сделать это?
Как проверить std::string в GDB без исходного кода?
Ответ 1
Каждая реализация std::string
имеет указатель на необработанные символы в ней где-то. Для g++ 4.x
этот указатель находится в смещении 0
в строку.
Если вы знаете, что строка находится, например, 0x7fffffffda88
, то
print *(char**)0x7fffffffda88
- это то, что вам нужно.
Ответ 2
Возможно, самым простым вариантом является использование метода c_str
, как в:
print myStr.c_str()