LINUX.ORG.RU

C++, отладка


0

1

Привет. Проект использует несколько статических библиотек. Чтобы добавить отладочную информацию я перекомпилирую один из объектников и заменяю его в библиотеке. Всё проходило нормально, но я столкнулся с одним классом, который не хочет отображаться в отладчике.

gdb говорит <incomplete type>. Гугление привело к этому http://stackoverflow.com/questions/232744/how-to-print-incomplete-type-variable-in-gdb что это может быть последствия использования класса как

class A;
А не
#include "A.h"
Кто-нибудь сталкивался с этим и как всё-таки получить данные объекта при отладке?

★★★★★

Судя по ссылке, нужно описать где-нибудь свой класс Б с таким же набором полей, как и у А, а потом приводить указатель и принтить. Сам не пробовал.

kulti ★★
()

в нашем проекте до черта объявлений вида «class X;» в одном объектнике и определения этого class X в другом. Усё работает.

ты уверен, что причина - именно невидимость class A из главного модуля? gdb может говорить incomplete type еще в куче случаев, например, когда этот class A включает в себя anonimous union, и т д

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

Нет, не уверен, поэтому и спрашиваю =)
В чём ещё может быть причина?

UVV ★★★★★
() автор топика
Ответ на: комментарий от Vernat

>я думал в момент использования тип уже известен

Если компилятор соблаговолил его распарсить в сооветствии с твоими представлениями о добре и зле... (Если вдруг они случайно совпали) Но у разных компиляторов они могут разительно отличаться. (Вся проблема с, в том, что компилятор делает в точности то, что ты попросил... По его мнению. А не то что подразумевал.)

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

У Герб Саттера вышеописанный прием называется pimpl. Я часто использую его. И всегда во время выполнения (не компиляции) тип вёл себя так будто он тот самый тип, что я подразумевал :)

Vernat ★★
()
Ответ на: комментарий от Vernat

>У Герб Саттера вышеописанный прием называется pimpl. Я часто использую его. И всегда во время выполнения (не компиляции) тип вёл себя так будто он тот самый тип, что я подразумевал :)

Этот бородатый прием не спасает многих товарищей, которые привыкли к «глобальной и надежной» M$VS, от ее вольных трактовок стандарта и расхождений в трактовке шаблонов. (Даже фанатов pimpl, которые затачивают под него вообще все классы (лично знаю одного - любит он эту «пимпу» - фактически «стандартное заклинание», а еще его очень волнует «оверхед!!!111»... Оптимизирует все. Без замеров и конкретных цифр. (На задрачивание под пимплы время есть - на профайлер нет.)) В результате при переносе на др. платфомы бывают всякие приключения (что в студии «оптимальненько»... В линуксе зачастую печальненько). Ситуации, когда «gcc не прощает» и сразу серет в лог ошибками - еще из самых легких.

slackwarrior ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.