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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Ошибка SegFault при входе в main()  (Прочитано 15520 раз)
p166
Гость
« : Октябрь 21, 2010, 13:42 »

Нужна помощь гуру!!!

Совершенно неожиданно, сегодня утром перестал запускаться рабочий проект. Программа нормально собирается, никаких ошибок не выдает, но при запуске вылетает с классическим сообщением:

Код:
Программа неожиданно завершилась.

В режиме отладки увидел что вываливается она на:
Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);             <================ вот здесь
    QViewBase w;
    w.show ();
    ...
    return a.exec();
}

а в консоль сыпятся такие строки:

Код:
can't find linker symbol for virtual table for `QObjectData' value
can't find linker symbol for virtual table for `QObjectData' value
can't find linker symbol for virtual table for `QObjectPrivate' value

Исполняемый файл, собранный вчера, запускается на ура, но если пересобрать получаем "Segmentation fault". Вообщем теряюсь в догадках что могло произойти, исключил из проекта все сторонние библиотеки, проблема осталась. Google решить проблему не смог.
Все остальные проекты собираются и запускаются без приключений!



Проверено на:
Qt 4.7, 4.6.3
ОС Ubuntu 10.04, 10.10, OpenSuse 11.2
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Октябрь 21, 2010, 13:46 »

Похоже что что-то с Qt libs.
Натрави на свой экзешник ldd.
Записан

Qt 5.11/4.8.7 (X11/Win)
p166
Гость
« Ответ #2 : Октябрь 21, 2010, 13:49 »

Похоже что что-то с Qt libs.
Натрави на свой экзешник ldd.

Натравил, получилось вот что:
Код:
        linux-gate.so.1 =>  (0x005fb000)
        libQtGui.so.4 => /opt/qtsdk-2010.05/qt/lib/libQtGui.so.4 (0x008aa000)
        libQtNetwork.so.4 => /opt/qtsdk-2010.05/qt/lib/libQtNetwork.so.4 (0x00177000)
        libQtCore.so.4 => /opt/qtsdk-2010.05/qt/lib/libQtCore.so.4 (0x002b4000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00110000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x005fc000)
        libm.so.6 => /lib/libm.so.6 (0x0012a000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x007e3000)
        libc.so.6 => /lib/libc.so.6 (0x15b39000)
        libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0x00150000)
        librt.so.1 => /lib/librt.so.1 (0x00155000)
        libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x006e7000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x007ff000)
        libSM.so.6 => /usr/lib/libSM.so.6 (0x0015e000)
        libICE.so.6 => /usr/lib/libICE.so.6 (0x00592000)
        libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00167000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x005ab000)
        libz.so.1 => /lib/libz.so.1 (0x005db000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0x007b6000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0x14587000)
        libdl.so.2 => /lib/libdl.so.2 (0x00171000)
        /lib/ld-linux.so.2 (0x0088c000)
        libpcre.so.3 => /lib/libpcre.so.3 (0x0fc6d000)
        libuuid.so.1 => /lib/libuuid.so.1 (0x005f0000)
        libexpat.so.1 => /lib/libexpat.so.1 (0x191ff000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0x007c6000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0x005f5000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00876000)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Октябрь 21, 2010, 13:56 »

А в том же shell-е сам экзешник запускал?
Можно ещё strace натравить.
Причём посмотреть вывод ldd и strace рабочего экзешник-а и сравнить с вывод с падучим.
Записан

Qt 5.11/4.8.7 (X11/Win)
p166
Гость
« Ответ #4 : Октябрь 21, 2010, 14:09 »

А в том же shell-е сам экзешник запускал?
Можно ещё strace натравить.
Причём посмотреть вывод ldd и strace рабочего экзешник-а и сравнить с вывод с падучим.

ldd рабочего и вновь собранного совпадают, вот strace в месте падения:

Код:
futex(0xbf9b77a0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0xbf9b77a0, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, bf9b77b0) = -1 EAGAIN (Resource temporarily unavailable)
rt_sigaction(SIGRTMIN, {0x1146e0, [], SA_SIGINFO}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x114bc0, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
uname({sys="Linux", node="username", ...}) = 0
brk(0)                                  = 0x8bb9000
brk(0x8bda000)                          = 0x8bda000
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Ошибка сегментирования

у рабочего файла в strace далее идет
Код:
futex(0x63b46c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
« Последнее редактирование: Октябрь 21, 2010, 14:19 от p166 » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Октябрь 21, 2010, 14:14 »

strace рабочего до места падения последнего отличаются?

А вообще не мешало бы собрать проект и Qt с отладкой и посмотреть на чём падает.
« Последнее редактирование: Октябрь 21, 2010, 14:16 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
p166
Гость
« Ответ #6 : Октябрь 21, 2010, 14:24 »

strace рабочего до места падения последнего отличаются?

А вообще не мешало бы собрать проект и Qt с отладкой и посмотреть на чём падает.

На чем падает это понятно - строка в main.cpp QApplication a(argc, argv);
Вопрос почему?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Октябрь 21, 2010, 14:29 »

падает не в main.cpp, а где-то в недрах QApplication.
А т.к. Qt собран без отладки, то отладчик показал последнее место в стэке, которое он смог разрезолвить.
Записан

Qt 5.11/4.8.7 (X11/Win)
p166
Гость
« Ответ #8 : Октябрь 21, 2010, 14:37 »

Собрано в режиме отладки - Debug.......
Сравнил strace для обоих файлов, различие только в адресном пространстве.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Октябрь 21, 2010, 14:41 »

Чудес на свете не бывает...
Qt тоже с отладкой?
ставь тогда breakpoint на этой строке и делай step in в QApplication.
Записан

Qt 5.11/4.8.7 (X11/Win)
p166
Гость
« Ответ #10 : Октябрь 21, 2010, 14:43 »

Пробовал уже, не давая зайти в реализацию QApplication(), заваливает приложение по segfault и ругается в консоль
Код:
can't find linker symbol for virtual table for `QObjectData' value
can't find linker symbol for virtual table for `QObjectPrivate' value
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Октябрь 21, 2010, 14:49 »

Поставь break на main() запусти и после останова введи 'info shared'
Записан

Qt 5.11/4.8.7 (X11/Win)
p166
Гость
« Ответ #12 : Октябрь 21, 2010, 14:58 »

Поставь break на main() запусти и после останова введи 'info shared'

хм а где вводить "info shared"? Запускаю в QT Creator через F5, остановился на QApplication a(argc, argv); а куда вводить н понимаю ........
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Октябрь 21, 2010, 15:06 »

в gdb конечно же.
Надо было раньше про это сказать.
Сделайте:
gdb <app_file>
break main
run
info shared
Записан

Qt 5.11/4.8.7 (X11/Win)
p166
Гость
« Ответ #14 : Октябрь 21, 2010, 15:09 »

Код:
Результат info shared: 

(gdb) info shared
From        To          Syms Read   Shared Object Library
0x00110830  0x001277af  Yes         /lib/ld-linux.so.2
0x0027e440  0x00a11954  Yes         /opt/qtsdk-2010.05/qt/lib/libQtGui.so.4
0x00c9bbd0  0x00d693c4  Yes         /opt/qtsdk-2010.05/qt/lib/libQtNetwork.so.4
0x00e05020  0x00faea84  Yes         /opt/qtsdk-2010.05/qt/lib/libQtCore.so.4
0x01094610  0x010a0ad8  Yes         /lib/libpthread.so.0
0x010ee2e0  0x0115fcd8  Yes (*)     /usr/lib/libstdc++.so.6
0x011984b0  0x011b27f8  Yes         /lib/libm.so.6
0x011bcf50  0x011d3438  Yes (*)     /lib/libgcc_s.so.1
0x011edac0  0x012f7a74  Yes         /lib/libc.so.6
0x01335f60  0x01337608  Yes (*)     /usr/lib/libgthread-2.0.so.0
0x0133b8c0  0x0133f6f8  Yes         /lib/librt.so.1
0x013552e0  0x013cae38  Yes (*)     /lib/libglib-2.0.so.0
0x01418560  0x01471b48  Yes (*)     /usr/lib/libfreetype.so.6
0x0148a630  0x0148f088  Yes (*)     /usr/lib/libSM.so.6
0x01495680  0x014a5578  Yes (*)     /usr/lib/libICE.so.6
0x014ac4d0  0x014b22b8  Yes (*)     /usr/lib/libXrender.so.1
0x014b9830  0x014d5398  Yes (*)     /usr/lib/libfontconfig.so.1
0x014e6760  0x014f3988  Yes (*)     /lib/libz.so.1
0x014fcad0  0x01506f98  Yes (*)     /usr/lib/libXext.so.6
0x0151d6e0  0x015ade88  Yes (*)     /usr/lib/libX11.so.6
0x01627a40  0x01628988  Yes         /lib/libdl.so.2
0x0162c0c0  0x0164c378  Yes (*)     /lib/libpcre.so.3
0x01661060  0x01662b18  Yes (*)     /lib/libuuid.so.1
0x016671e0  0x0167fb28  Yes (*)     /lib/libexpat.so.1
0x01693b60  0x016a2678  Yes (*)     /usr/lib/libxcb.so.1
0x016a69c0  0x016a7768  Yes (*)     /usr/lib/libXau.so.6
0x016aaeb0  0x016acb18  Yes (*)     /usr/lib/libXdmcp.so.6

дальше набираю step и получаю
Код:
Program received signal SIGSEGV, Segmentation fault.
main (argc=1, argv=0xbffff914) at main.cpp:7
7     QApplication a(argc, argv);
« Последнее редактирование: Октябрь 21, 2010, 15:14 от p166 » Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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