У меня есть структура, которая объявлена в стеке.Вот как выглядит структура:
struct MyStruct {
int integer;
std::vector<bool > booleanVector;
};
Когда я выполняю следующую функцию с помощью gdb, печатая значения s.integer
и s.booleanVector.size()
, операторы, похоже, не действуют.
MyStruct getMyStruct()
{
MyStruct s;
s.integer = 3;
s.booleanVector.resize( s.integer );
return s;
}
Однако, когда я вставляю операторы печати, такие как std::cout << s.integer << std::endl;
, вывод показывает, что значения s.integer
и s.booleanVector.size()
были правильно изменены.
Я обнаружил, что проблема кажетсябыть связанным со структурой, возвращаемой функцией, в которой она объявлена.Проблема с отображением недопустимой информации о структуре в gdb, если она не возвращается функцией, в которой она объявлена.
Это упрощенный пример, демонстрирующий проблему, с которой я столкнулся при попытке отладкипроект.Эта проблема с gdb отвлекала меня от реальной ошибки в моем коде и затрудняла ее поиск (изначально я думал, что проблема может быть в незначительной ошибке в моем коде, поэтому я и разместил ее здесь). Здесь - это полная небольшая программа, которая демонстрирует такое поведение в моей системе.
Я предполагаю, что мой вопрос заключается в том, является ли это просто ошибкой в gdb или это поведение возникает в результате того, как gccобрабатывает структуры / классы, которые должны быть возвращены из функции.
Примечание. Использование gdb 6.3 с gcc 4.2 в Mac OSX 10.6 (Snow Leopard)