Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: Mechanik от Октябрь 07, 2010, 16:45



Название: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: 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
Причина найдена. Падает при включенной опции отладчика "Включить реверсивную отладку".


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: kibsoft от Октябрь 08, 2010, 00:34
Цитировать
QString("asdsad");
Может как-то связано с оптимизацией компилера? Тут как бы даже переменной то нет))
Попробуй попробовать:
Код:
QString str("asdsad");
, не должен падать :)


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: AlekseyK от Октябрь 08, 2010, 00:57
ЛОЛ, но это не единственная причина. У меня вчера такое было: лечится полной переcборкой проекта и презагрузкой gdb или даже creator-a.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 08, 2010, 07:31
Цитировать
QString("asdsad");
Может как-то связано с оптимизацией компилера? Тут как бы даже переменной то нет))
Попробуй попробовать:
Код:
QString str("asdsad");
, не должен падать :)
Я в коде упростил, а так падает при любом вызове конструктора QString.
ЛОЛ, но это не единственная причина. У меня вчера такое было: лечится полной переcборкой проекта и презагрузкой gdb или даже creator-a.
Ес-но, пересобирал, перезагружал, перезапускал. Пробовал в разных вариантах на разных проектах.
У кого в тех же условиях под *nix все работает без проблем - просьба, укажите, пожалуйста, ОС, версию ядра, gdb, glibc. Спасибо.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: gogi от Октябрь 08, 2010, 09:49
Падает gdb? Легко можешь повторить? Пиши багрепорт в его багтрекер(или что у него там).
А пока ищи workaround'ы.
Падения программы - достаточно серьёзная ошибка, можно ожидать что её исправят быстро.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: gogi от Октябрь 08, 2010, 09:51
А по теме: перед созданием QString("asdsad"); не пробовал создавать объект QApplication/QCoreApplication?


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 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 - что его искать, к точкам останова приходиться терпетно относиться, жить можно, но усложняет отладку.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 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;
}
все остается по прежнему.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 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. Спасибо.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: gogi от Октябрь 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.

Даже если баг, они едва ли будут старые версии чинить.
Ну есть вероятность, что багу много лет. Просто его никто не находил или все забивали.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: gogi от Октябрь 08, 2010, 11:34
Проверил у себя твой пример(у меня QtCreator 1.3.1, gdb 7.0.1) - всё нормально


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: gogi от Октябрь 08, 2010, 11:36
непонятно, при чем тут QCoreApplication...
Ну перед обращением к класам Qt неплохо бы создать объект приложения. А QCoreApplication - это консольное приложение.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: crossly от Октябрь 08, 2010, 11:52
creator 1.3.1 gdb 6.8... проблемы нету


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 08, 2010, 12:44
creator 1.3.1 gdb 6.8... проблемы нету
как я писал выше, у меня со старым creator (< 2.0) тоже проблемы нет... интересует >=2.0


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 08, 2010, 12:47
Ну перед обращением к класам Qt неплохо бы создать объект приложения. А QCoreApplication - это консольное приложение.
Я таких рекомендаций в документации не видел. Насколько понимаю, классы Qt вполне можно использовать без приложений Qt, которые предназначены для организации и обработки цикла событий.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: crossly от Октябрь 08, 2010, 12:52
creator 1.3.1 gdb 6.8... проблемы нету
как я писал выше, у меня со старым creator (< 2.0) тоже проблемы нет... интересует >=2.0
так все же мот дело не в gdb??


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 08, 2010, 13:00
Я хз что такое "abrtd". У меня в дебиане его нету. И гуголь не охотно сознаётся. И для coredump'a он не нужен, то есть coredump можно получить и без него. И вообще твой дистрибутивный gdb по идее будет без отладочной информации. А чтобы её заиметь, нужно его собрать с отладкой. Куда dump  валится - наверное в текущий каталог под именем "core". Это можно настроить через /proc/sys/kernel/core_pattern(man 5 core).
abrt - an automated bug-reporting tool,  перехватывает падения и теоретически может сама отправить bugreport... дамп при этом в текущий каталог не записывается.  хм, а надо попробовать ей отправить )
Да, насчет того, что у меня дампа не было и при выключенной abrt - действительно, gdb собран без отладки, это мысль, спасибо.
В любом случае, перед bugreport'ингом хотелось бы зафиксировать еще где-то подобные явления...


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 08, 2010, 13:05
так все же мот дело не в gdb??
может и так, но падает именно он... падает, как видно по стеку, при вызове __strlen_sse2 () из /lib/libc.so.6. Может, дело в glibc. Может, creator, хотя тогда проблема была бы более массовая... Потому спрашиваю про версии )


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: gogi от Октябрь 08, 2010, 13:23
может и так, но падает именно он... падает, как видно по стеку, при вызове __strlen_sse2 () из /lib/libc.so.6. Может, дело в glibc. Может, creator, хотя тогда проблема была бы более массовая... Потому спрашиваю про версии )

Если ориентироваться на это
Цитировать
Если в 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.7.0? Попробуй запустить без креатора. И отладиться в консольном gdb.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 08, 2010, 13:24
Похоже, сам gdb ни при чем. Прогнал вручную:
Цитировать
[nik@nik test_gdb_crush]# gdb ./test_gdb_crush
GNU gdb (GDB) Fedora (7.0.1-50.fc12)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/nik/projects/simple/test_gdb_crush/test_gdb_crush...done.
(gdb) b main.cpp:7
Breakpoint 1 at 0x80486b9: file main.cpp, line 7.
(gdb) r
Starting program: /home/nik/projects/simple/test_gdb_crush/test_gdb_crush
[Thread debugging using libthread_db enabled]

Breakpoint 1, main (argc=1, argv=0xbffff634) at main.cpp:7
7       QString("asdsad");
Missing separate debuginfos, use: debuginfo-install glib2-2.22.5-1.fc12.i686 glibc-2.11.1-1.i686 libgcc-4.4.2-7.fc12.i686 libstdc++-4.4.2-7.fc12.i686
(gdb) n
8       int i=1;
(gdb) n
9   }
(gdb) n
0x00913bb6 in __libc_start_main () from /lib/libc.so.6
(gdb) n
Single stepping until exit from function __libc_start_main,
which has no line number information.

Program exited normally.
(gdb)
все ок. Т.е. дело все-таки в QtCreator?


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 08, 2010, 13:27
То может падает всё-таки программа? Баг в Qt 4.7.0? Попробуй запустить без креатора. И отладиться в консольном gdb.
Вот и мне пришла такая мысль в голову, прочитал после своего поста уже )) Насчет бага в Qt - с Qt 4.6.2 то же самое...


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: gogi от Октябрь 08, 2010, 13:30
Я таких рекомендаций в документации не видел. Насколько понимаю, классы Qt вполне можно использовать без приложений Qt, которые предназначены для организации и обработки цикла событий.

Ну для простых хэллоувордов может и прокатит. Но если чего посложнее, мы же не вникаем в реализацию всех этих Кутешных классов, может там и события нужны.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 08, 2010, 13:46
Ну для простых хэллоувордов может и прокатит. Но если чего посложнее, мы же не вникаем в реализацию всех этих Кутешных классов, может там и события нужны.
ну так тут хеллоуворд и есть. Столкнулся вначале с проблемой в проекте после перехода на новый креатор, чтоб ее изолировать - сделал такую вот максимально простую болванку.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: gogi от Октябрь 08, 2010, 13:54
все ок. Т.е. дело все-таки в QtCreator?

Иди в http://bugreports.qt.nokia.com/ и делай репорт. gdb падает? Нет. Программа автономно падает? Нет. Значит дело в креаторе.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Vass от Октябрь 08, 2010, 13:58
Debian GNU/Linux 2.6.30-2-686 #1 SMP Fri Dec 4 00:53:20 UTC 2009 i686
QtCreator 2.0.1
Qt 4.7.0 release
GNU gdb (GDB) 7.2-debian
glibc 2.11.1-1

Проблемы нет.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: gogi от Октябрь 08, 2010, 19:08
Проверил на i686-ом Arch'е
Не падает
gcc - 4.5.1
Qt - 4.7.0
QtCreator - 2.0.1
qlibc - 2.12.1

Подозреваю что у тебя 64-х битная федора (из-за функции __strlen_sse2). Может причина и в этом?


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: xokc от Октябрь 10, 2010, 10:55
QtCreator 2.0.1, Qt 4.7.0 (64 bit) - не падает


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 11, 2010, 07:51
Подозреваю что у тебя 64-х битная федора (из-за функции __strlen_sse2). Может причина и в этом?
да нет, 32:
Код:
[nik@nik /]$ uname --a
Linux nik 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 i686 i386 GNU/Linux


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 11, 2010, 08:17
Спасибо откликнувшимся. Пока осторожно предположу, что виноват все-таки gdb...
QtCreator 2.0.1, Qt 4.7.0 (64 bit) - не падает
а gdb, glibc какие?


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: xokc от Октябрь 11, 2010, 18:55
GNU gdb (GDB) 7.1-ubuntu
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
qlibc 2.11.1-0ubuntu7.2


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: gogi от Октябрь 12, 2010, 10:11
Подозреваю что у тебя 64-х битная федора (из-за функции __strlen_sse2). Может причина и в этом?
да нет, 32:
Код:
[nik@nik /]$ uname --a
Linux nik 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 i686 i386 GNU/Linux

А вот это-то и странно. i686 - это подразумевается что я могу взять какой-нибудь первопень, поставить на него эту федору и всё будет работать(томозить, но это другой вопрос). Не так ли? С хренали есть обращения к SSE2-инструкциям, которые появились во времена Pentium'a 4? То есть, как я понимаю есть стандартная сишная функция strlen, а уже на конкретной платформе она реализуется по-разному. Если есть SSE2, как в твоём случае, то при сборке libc компилируется его поддержка и идёт в конечном итоге обращение к функции __strlen_sse2.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: navrocky от Октябрь 12, 2010, 10:49
У меня gdb падал и зависал в креаторе 1.3 qt 4.6 и не обязательно на qt-коде. Под netbeans у меня gdb не падает, но зависает частенько в определенных местах. Подозреваю что это все-таки баги gdb. В особо тяжелых случаях ручной прогон через консоль тоже приводил к зависаниям. Проблемы замечены как под винду так и под линукс.

У меня приложение жирное более 100 статических модулей, поэтому я довольно часто сталкиваюсь с этими багами, на простых приложениях он работает вроде более менее сносно.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 12, 2010, 11:04
Код:
[nik@nik /]$ uname --a
Linux nik 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 i686 i386 GNU/Linux
А вот это-то и странно. i686 - это подразумевается что я могу взять какой-нибудь первопень, поставить на него эту федору и всё будет работать(томозить, но это другой вопрос). Не так ли? С хренали есть обращения к SSE2-инструкциям, которые появились во времена Pentium'a 4? То есть, как я понимаю есть стандартная сишная функция strlen, а уже на конкретной платформе она реализуется по-разному. Если есть SSE2, как в твоём случае, то при сборке libc компилируется его поддержка и идёт в конечном итоге обращение к функции __strlen_sse2.
Да вот черт его знает, может, криво в федоре напихано... В любом случае, понятно, что проблема не массовая. Копаться некогда, пока так работаю.


Название: Re: Падает gdb при пошаговой отладке в QtCreator 2.0.1 в конструкторе QString
Отправлено: Mechanik от Октябрь 15, 2010, 09:01
Ура, нашел. Ломается при включенной реверсивной отладке. Причем Creator 1.3.1 с ней работает.