В моем main()
у меня есть некоторая переменная (reader
) в стеке, которая имеет тип OggReader
(некоторые собственные struct
/ class
).Эта переменная отображается как <not accessible>
в отладчике Qt Creator / GDB:
Затем я вызываю некоторую функцию для этого класса, так что this
должен указывать на этот reader
объект.Но Qt Creator / GDB не показывает содержимое this
:
Почему?Как я могу это исправить?
Это Qt Creator 4.0.2 в Ubuntu 16.04.Я использую g ++ 5.4.0 с параметрами -g -O0 -g3 -ggdb
.Я использую GDB 7.11.1.
Класс OggReader
:
struct OggReader {
Page buffer_page_;
std::map<uint32_t, VorbisStream> streams_;
size_t packet_counts_;
std::shared_ptr<IReader> reader_;
ParseCallbacks& callbacks_;
OggReader(ParseCallbacks& callbacks) : packet_counts_(0), callbacks_(callbacks) {}
...
};
Page
:
struct Page {
PageHeader header;
uint8_t segment_table[256]; // page_segments_num in len
uint32_t data_len;
uint8_t data[256 * 256];
...
};
PageHeader
:
struct __attribute__((packed)) PageHeader {
char capture_pattern[4]; // should be "OggS"
uint8_t stream_structure_version; // should be 0
uint8_t header_type_flag; // 0x1: continued, 0x2: first (bos), 0x4: last (eos)
int64_t absolute_granule_pos; // end PCM sample position of the last packet completed on that page
uint32_t stream_serial_num;
uint32_t page_sequence_num;
uint32_t page_crc_checksum;
uint8_t page_segments_num;
};
Может __attribute__((packed))
как-то смущает GDB?Даже когда я явно делаю это
Page* dummy = &buffer_page_;
внутри некоторой Page
функции-члена, он также не показывает содержимое этого dummy
ptr (это тот же адрес, что и this
, потому что buffer_page_
начинается с нулевого смещения от this
).
Этот вопрос связан, хотя я думаю, что речь идет не о this
(некоторые собственные struct
/ class
), а вместоо стандартных типах (std::string
или около того).Также все приведенные решения не имеют эффекта или не применяются.Например, «Загрузка системных GDB красивых принтеров» уже отключена.