Russian Qt Forum
Ноябрь 23, 2024, 00:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с отображением переменных при отладке  (Прочитано 4693 раз)
mad
Гость
« : Май 11, 2016, 02:48 »

Здравствуйте!
Такая проблема. Имею Qt 5.6, две сборки dynamic и static, обе компилировались vs2015 debug and release.
В Qt Creator 3.6.1 подключил отладчик CDB из SDK 10. Настроил обе kits, подключил компилятор тот же самый, которым собирались обе сборки.
Создаю простейший консольный проект.

Код:
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QLocale loc = QLocale::system();

    return a.exec();
}

Когда использую static kit, то в отладчике переменная loc нормально разворачивается. Переключаю на dynamic kit (Qt shared dlls) и начинаются приколы,
отладчик показывает ошибку Value unavailable error Ниже прикрепил картинки. В тоже время тестил MinGW(Qt shared dlls), он все нормально показывает.
Но он не устраивает медленной работой отладчика gdb, уж слишком долго приатачивается к процессу, cdb это делает практически мгновенно.
Статический kit тоже не устраивает на постоянной основе, т.к. долгая перекомпиляция проекта.
Пробовал собирать Qt компилятором vs2013, то же самое.
Подскажите куда копать, чего только не перепробовал уже  Грустный




« Последнее редактирование: Май 11, 2016, 02:50 от mad » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Май 11, 2016, 08:01 »

А может компилятор выкинул переменную, т.к. она нигде не используется? А если попробовать зделать ее volatile или добавить qDebug() ?
Записан

ArchLinux x86_64 / Win10 64 bit
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Май 11, 2016, 09:22 »

Я бы попробовал qtcreator-3.6.0. Этот релиз (3.6.1), на мой взгляд, с undefined behaviour получился. Даже на скринах видна такая же проблема как и у меня, в дереве вместо плюсов какие-то чекбоксы отрисовываются.
Записан
mad
Гость
« Ответ #3 : Май 13, 2016, 01:07 »

Спасибо за советы, попробовал и volatile и qDebug() и передачу по ссылке в другую функцию.  И qtcreator-3.6.0. Все ровно тоже самое. Простые типы то нормально показываются. Статическая+shared с++ runtime и чисто статическая сборка Qt показывают в отладке все как полагается. А чисто shared версия Qt хоть убей не понимаю - почему не хочет. Причем в окне лога отладчика особо вразумительной инфы не вижу. pdb файлы подгружаются.
При попытке "раскрыть переменную" в лог пишется:

Код:
<locals-v -c -a 0 local.loc
<locals-v -c -a 0 local.loc
<locals-v -c -a 0 local.loc
 DEBUG: , complex dumpers
ddata=[{iname="local.loc",name="loc",type="class QLocale",exp="*(QLocale *)0x3cfa28",address="0x3cfa28",size="4",valueencoded="0",value="class QLocale",valueenabled="true",valueeditable="false",numchild="2",children=[{iname="local.loc.d",name="d",type="class QSharedDataPointer<QLocalePrivate>",exp="*(untitled!QSharedDataPointer<QLocalePrivate> *)0x3cfa28",address="0x3cfa28",size="4",valueencoded="0",value="class QSharedDataPointer<>",valueenabled="true",valueeditable="false",numchild="32"},{iname="local.loc.staticMetaObject",name="staticMetaObject",type="<Value unavailable error>",exp="*(untitled!<Value unavailable error> *)0",valueencoded="0",value="",valueenabled="true",valueeditable="false",numchild="0"}]}]
 <Rebuild Watchmodel 94 @ 01:05:06.249 [5735ms] >
sFinished retrieving data
 DEBUG: , complex dumpers
ddata=[{iname="local.loc",name="loc",type="class QLocale",exp="*(QLocale *)0x3cfa28",address="0x3cfa28",size="4",valueencoded="0",value="class QLocale",valueenabled="true",valueeditable="false",numchild="2",children=[{iname="local.loc.d",name="d",type="class QSharedDataPointer<QLocalePrivate>",exp="*(untitled!QSharedDataPointer<QLocalePrivate> *)0x3cfa28",address="0x3cfa28",size="4",valueencoded="0",value="class QSharedDataPointer<>",valueenabled="true",valueeditable="false",numchild="32"},{iname="local.loc.staticMetaObject",name="staticMetaObject",type="<Value unavailable error>",exp="*(untitled!<Value unavailable error> *)0",valueencoded="0",value="",valueenabled="true",valueeditable="false",numchild="0"}]}]
 <Rebuild Watchmodel 95 @ 01:05:06.252 [3ms] >
sFinished retrieving data
 DEBUG: , complex dumpers
ddata=[{iname="local.loc",name="loc",type="class QLocale",exp="*(QLocale *)0x3cfa28",address="0x3cfa28",size="4",valueencoded="0",value="class QLocale",valueenabled="true",valueeditable="false",numchild="2",children=[{iname="local.loc.d",name="d",type="class QSharedDataPointer<QLocalePrivate>",exp="*(untitled!QSharedDataPointer<QLocalePrivate> *)0x3cfa28",address="0x3cfa28",size="4",valueencoded="0",value="class QSharedDataPointer<>",valueenabled="true",valueeditable="false",numchild="32"},{iname="local.loc.staticMetaObject",name="staticMetaObject",type="<Value unavailable error>",exp="*(untitled!<Value unavailable error> *)0",valueencoded="0",value="",valueenabled="true",valueeditable="false",numchild="0"}]}]
 <Rebuild Watchmodel 96 @ 01:05:06.255 [3ms] >
sFinished retrieving data

А вот почему конкретно эта ошибка...
Записан
mad
Гость
« Ответ #4 : Май 22, 2016, 17:02 »

Еще пробовал студию 2013, так там вообще пишет при отладке переменных "pointer to implicit shared object of type ..." Печально.
В общем, решил остановиться на сборке msvc2015 static+shared runtime и Qt Creator, в принципе и быстро компилит и отладчик cdb присоединяется намного быстрее, чем gdb.
Но теперь заметил очередные приколы отладки. Например при парсинге xml.
Например такой код;

Код:
QDomDocument domDoc;
domDoc.setContent( валидный xml текст);
QDomNodeList dnl = domDoc.elementsByTagName("sometag");

В итоге в dnl должно быть в моем случае 3 элемента, но в окне отладчика пишет list <0 items>.
Но если добавить строчку
Код:
int cnt = dnl.count();

то после ее прохождения окно с переменными обновляется и у dnl становится 3 items, и появляется список с этими элементами.
С чем это связано? Т.к. я изучал в первый раз работу этого класса, то думал, что делаю что-то не так и из-за этого 0 items. Неприятная подстава.
Резюмирую, что отладка у Qt на твердую троечку, очень неудобно все, какие-то постоянные нюансы, окно с переменными постоянно глючит. Не понимаю тогда, чего так все восторгаются им, или все юзают только qDebug? Напоминает ситуацию с продуктами Apple, когда упорно не хотят видеть их минусы))




« Последнее редактирование: Май 22, 2016, 17:04 от mad » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.206 секунд. Запросов: 22.