Как проверить std :: string в GDB без исходного кода? - PullRequest
17 голосов
/ 21 июля 2011

Я пытаюсь отладить программу, у которой нет доступного исходного кода, и мне нужно посмотреть, что она хранит в std :: string. Я гуглил и смотрю здесь, и я нашел некоторую информацию о выводе контейнеров STL, но все это относится к переменным, без информации об источнике или отладке, все, что у меня есть, это смещение памяти данных класса. Есть ли способ сделать это?

Ответы [ 2 ]

28 голосов
/ 21 июля 2011

В каждой реализации std::string есть указатель на необработанные символы.Для g++ 4.x этот указатель находится по смещению 0 в строке.

Если вы знаете, что строка находится, например, в 0x7fffffffda88, тогда

print *(char**)0x7fffffffda88

- это то, что вам нужно.

15 голосов
/ 05 августа 2016

Возможно, самый простой вариант - использовать метод c_str, например:

print myStr.c_str()
...