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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString  (Прочитано 20853 раз)
Mechanik
Гость
« : Октябрь 07, 2010, 16:45 »

Примитивное приложение:
Код:
#include <QString>
int main(int argc, char *argv[])
{
    QString("asdsad");
    int i=1;
}
Если в QtCreator 2.0.1 поставить точку останова на строчку "QString...", а затем продолжить отладку (любым способом - F5,F10,F11) - появляется сообщение "Приложение остановлено, т.к. оно получило сигнал от операционной системы. Сигнал: SIGABRT Назначение: Aborted", отладка завершается. Стек:
Код:
Thread 1 (Thread 0xb7fe38e0 (LWP 17588)):
#0  0x001867f7 in __strlen_sse2 () from /lib/libc.so.6
#1  0x00de02dc in qstrlen (str=<value optimized out>) at ../../include/QtCore/../../src/corelib/tools/qbytearray.h:68
#2  QString::fromLatin1_helper (str=<value optimized out>) at /var/tmp/qt-src/src/corelib/tools/qstring.cpp:3713
#3  0x00de6f11 in QString::fromAscii_helper (str=0x8048724 "asdsad", size=134514468) at /var/tmp/qt-src/src/corelib/tools/qstring.cpp:3774
#4  0x08048621 in QString::QString (this=0xbffff788, ch=0x8048724 "asdsad") at /opt/qtsdk-2010.05/qt/include/QtCore/qstring.h:426
#5  0x080485d1 in main (argc=1, argv=0xbffff844) at main.cpp:4
Проблема возникает при использовании qt версий 4.6.2, 4.7.0.
Если поставить точку останова на строчку "int..." и запустить отладку, все работает.
Без отладки приложение тоже работает.
При этом в QtCreator 1.3.1 проблемы нет.
ОС: Fedora 12
gdb: 7.0.1-50.fc12
glibc: 2.11.1-1
Перешел на использование QtCreator 2.0.1 для разработки реального проекта, возникшая проблема стала существенно затруднять отладку. Возвращаться к 1.3.1 не хотелось бы. Что можно предпринять для решения?

**********15.10.2010
Причина найдена. Падает при включенной опции отладчика "Включить реверсивную отладку".
« Последнее редактирование: Октябрь 15, 2010, 09:04 от Mechanik » Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Октябрь 08, 2010, 00:34 »

Цитировать
QString("asdsad");
Может как-то связано с оптимизацией компилера? Тут как бы даже переменной то нет))
Попробуй попробовать:
Код:
QString str("asdsad");
, не должен падать Улыбающийся
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
AlekseyK
Гость
« Ответ #2 : Октябрь 08, 2010, 00:57 »

ЛОЛ, но это не единственная причина. У меня вчера такое было: лечится полной переcборкой проекта и презагрузкой gdb или даже creator-a.
Записан
Mechanik
Гость
« Ответ #3 : Октябрь 08, 2010, 07:31 »

Цитировать
QString("asdsad");
Может как-то связано с оптимизацией компилера? Тут как бы даже переменной то нет))
Попробуй попробовать:
Код:
QString str("asdsad");
, не должен падать Улыбающийся
Я в коде упростил, а так падает при любом вызове конструктора QString.
ЛОЛ, но это не единственная причина. У меня вчера такое было: лечится полной переcборкой проекта и презагрузкой gdb или даже creator-a.
Ес-но, пересобирал, перезагружал, перезапускал. Пробовал в разных вариантах на разных проектах.
У кого в тех же условиях под *nix все работает без проблем - просьба, укажите, пожалуйста, ОС, версию ядра, gdb, glibc. Спасибо.
Записан
gogi
Гость
« Ответ #4 : Октябрь 08, 2010, 09:49 »

Падает gdb? Легко можешь повторить? Пиши багрепорт в его багтрекер(или что у него там).
А пока ищи workaround'ы.
Падения программы - достаточно серьёзная ошибка, можно ожидать что её исправят быстро.
Записан
gogi
Гость
« Ответ #5 : Октябрь 08, 2010, 09:51 »

А по теме: перед созданием QString("asdsad"); не пробовал создавать объект QApplication/QCoreApplication?
Записан
Mechanik
Гость
« Ответ #6 : Октябрь 08, 2010, 10:09 »

Падает gdb? Легко можешь повторить? Пиши багрепорт в его багтрекер(или что у него там).
А пока ищи workaround'ы.
Падения программы - достаточно серьёзная ошибка, можно ожидать что её исправят быстро.
Да, падает gdb. Служба abrtd причем падение ловит, но coredump gdb не открывает - пишет ".../ccpp-1286448548-13623/coredump": not in executable format: Формат файла не распознан. При выключенном abrtd дамп не нашел, куда сваливается и сваливается ли вообще - непонятно. Хотел прицепить к посту то, что ловит abrtd, дюже большой архив - 2.5 метра. Могу выложить куда-нибудь.
Я пытался найти какие-то специфические требования qt -  к версиям gdb и прочего - не нашел.
Насчет багрепорта - пока хз, я поставил последний gdb, что есть в репозитарии к федоре 12, но есть версия и более свежая, боюсь, сюда ее уже без тотальных обновлений не прикрутишь... Даже если баг, они едва ли будут старые версии чинить.
workaround - что его искать, к точкам останова приходиться терпетно относиться, жить можно, но усложняет отладку.
Записан
Mechanik
Гость
« Ответ #7 : Октябрь 08, 2010, 10:20 »

А по теме: перед созданием QString("asdsad"); не пробовал создавать объект QApplication/QCoreApplication?
непонятно, при чем тут QCoreApplication...
Цитировать
The QCoreApplication class provides an event loop for console Qt applications
И в реальном проекте, поверьте, этот класс используется.
Хотя для чистоты эксперимента - ок, модифицируем код:
Код:
#include <QtCore/QCoreApplication>
#include <QString>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString("asdsad");
    int i=1;
}
все остается по прежнему.
Записан
Mechanik
Гость
« Ответ #8 : Октябрь 08, 2010, 10:40 »

Повторю просьбу - у кого есть время, - проверьте, пожалуйста, возможность корректной отладки следующего кода в QtCreator версии >= 2.0 под ОС *nix:
Код:
#include <QString>
nt main(int argc, char *argv[])
{
    QString("asdsad");
    int i=1;
}
Нужно установить точку останова на строку
Код:
QString("asdsad");
затем пройти отладчиком этот шаг.
Если при этом не возникает ошибок, отладка не прерывается - пожалуйста, укажите ОС, версии ядра, Qt, QtCreator, gdb, glibc. Спасибо.
« Последнее редактирование: Октябрь 08, 2010, 10:44 от Mechanik » Записан
gogi
Гость
« Ответ #9 : Октябрь 08, 2010, 11:28 »

Служба abrtd причем падение ловит, но coredump gdb не открывает - пишет ".../ccpp-1286448548-13623/coredump": not in executable format: Формат файла не распознан. При выключенном abrtd дамп не нашел, куда сваливается и сваливается ли вообще - непонятно. Хотел прицепить к посту то, что ловит abrtd, дюже большой архив - 2.5 метра. Могу выложить куда-нибудь.
Я пытался найти какие-то специфические требования qt -  к версиям gdb и прочего - не нашел.
Я хз что такое "abrtd". У меня в дебиане его нету. И гуголь не охотно сознаётся. И для coredump'a он не нужен, то есть coredump можно получить и без него. И вообще твой дистрибутивный gdb по идее будет без отладочной информации. А чтобы её заиметь, нужно его собрать с отладкой. Куда dump  валится - наверное в текущий каталог под именем "core". Это можно настроить через /proc/sys/kernel/core_pattern(man 5 core).

Насчет багрепорта - пока хз, я поставил последний gdb, что есть в репозитарии к федоре 12, но есть версия и более свежая, боюсь, сюда ее уже без тотальных обновлений не прикрутишь...
Ещё раз, dump для релиза малоинформативен(там только адреса). Так что лучше собрать. Это не сложно, из зависимостей только ncurses.

Даже если баг, они едва ли будут старые версии чинить.
Ну есть вероятность, что багу много лет. Просто его никто не находил или все забивали.
Записан
gogi
Гость
« Ответ #10 : Октябрь 08, 2010, 11:34 »

Проверил у себя твой пример(у меня QtCreator 1.3.1, gdb 7.0.1) - всё нормально
Записан
gogi
Гость
« Ответ #11 : Октябрь 08, 2010, 11:36 »

непонятно, при чем тут QCoreApplication...
Ну перед обращением к класам Qt неплохо бы создать объект приложения. А QCoreApplication - это консольное приложение.
Записан
crossly
Гость
« Ответ #12 : Октябрь 08, 2010, 11:52 »

creator 1.3.1 gdb 6.8... проблемы нету
Записан
Mechanik
Гость
« Ответ #13 : Октябрь 08, 2010, 12:44 »

creator 1.3.1 gdb 6.8... проблемы нету
как я писал выше, у меня со старым creator (< 2.0) тоже проблемы нет... интересует >=2.0
Записан
Mechanik
Гость
« Ответ #14 : Октябрь 08, 2010, 12:47 »

Ну перед обращением к класам Qt неплохо бы создать объект приложения. А QCoreApplication - это консольное приложение.
Я таких рекомендаций в документации не видел. Насколько понимаю, классы Qt вполне можно использовать без приложений Qt, которые предназначены для организации и обработки цикла событий.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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