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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: 4.8.1 Многопоточность глючит  (Прочитано 9243 раз)
RedDog
Гость
« : Сентябрь 26, 2012, 15:07 »

Собрал в статику под виндой сабж с поддержкой OpenSSL.  (по вики собирал)
Скопировал эту сборку в другую папку, очистил, пересобрал но без OpenSSL.
Есть некоторый многопоточный проект (с SSL никак не связанный):
1. Собираю с OpenSSL.
2. Собираю без  OpenSSL.
в 1-м случае нормально работает, но требует SSL либы рядом положить.
во 2-м случае крашится при выходе из потока.
проект отлаженный в 4.7.4 работал месяца 3 в режиме 24х7 вообще без глюков.
В чем может быть причина такой кривой сборки?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Сентябрь 26, 2012, 15:11 »

В кривой программе?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
RedDog
Гость
« Ответ #2 : Сентябрь 26, 2012, 16:03 »

В кривой программе?
Я ж говорю, на 4.7.4 работает без багов, на 4.8.1 с SSL тоже багов не обнаружено.
Записан
V1KT0P
Гость
« Ответ #3 : Сентябрь 26, 2012, 20:52 »

В кривой программе?
Я ж говорю, на 4.7.4 работает без багов, на 4.8.1 с SSL тоже багов не обнаружено.
Ну а что бэктрейс при падении говорит?
Записан
RedDog
Гость
« Ответ #4 : Сентябрь 27, 2012, 10:58 »

Ну а что бэктрейс при падении говорит?
знать бы еще как им пользоваться...
Записан
V1KT0P
Гость
« Ответ #5 : Сентябрь 27, 2012, 20:45 »

Ну а что бэктрейс при падении говорит?
знать бы еще как им пользоваться...
Запускаешь дебажную версию под дебагером, когда падает смотришь бэктрейс и видишь где упало. Если не можешь понять почему то выкладываешь здесь бэктрейс и кто-нибудь да подскажет куда копать.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #6 : Сентябрь 28, 2012, 05:47 »

Запускаешь дебажную версию под дебагером
Вы думаете он статическую версию с дебагом делал?
Записан
V1KT0P
Гость
« Ответ #7 : Сентябрь 28, 2012, 08:31 »

Запускаешь дебажную версию под дебагером
Вы думаете он статическую версию с дебагом делал?
Даже если вдруг и не делал, то в чем проблема сделать?
Записан
RedDog
Гость
« Ответ #8 : Сентябрь 28, 2012, 08:41 »

После сегфолта выдает дизасм:
Код:
        in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
0xbf7bbc  <+0x0000>         push   %ebp
0xbf7bbd  <+0x0001>         mov    %esp,%ebp
0xbf7bbf  <+0x0003>         push   %edi
0xbf7bc0  <+0x0004>         push   %esi
0xbf7bc1  <+0x0005>         push   %ebx
0xbf7bc2  <+0x0006>         sub    $0x1c,%esp
0xbf7bc5  <+0x0009>         mov    0x8(%ebp),%esi
        67 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
        68 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
0xbf7bc8  <+0x000c>         mov    (%esi),%edi
        69 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
        70 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
        71 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
0xbf7bca  <+0x000e>         test   %edi,%edi
0xbf7bcc  <+0x0010>         je     0xbf7be8 <emutls_destroy+44>
0xbf7bce  <+0x0012>         xor    %ebx,%ebx
0xbf7be3  <+0x0027>         inc    %ebx
0xbf7be4  <+0x0028>         cmp    %ebx,%edi
0xbf7be6  <+0x002a>         ja     0xbf7bd0 <emutls_destroy+20>
        72 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
        73 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
0xbf7bd0  <+0x0014>         mov    0x4(%esi,%ebx,4),%eax
0xbf7bd4  <+0x0018>         test   %eax,%eax
0xbf7bd6  <+0x001a>         je     0xbf7be3 <emutls_destroy+39>
        74 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
0xbf7bd8  <+0x001c>         mov    -0x4(%eax),%eax
0xbf7bdb  <+0x001f>         mov    %eax,(%esp)
0xbf7bde  <+0x0022>         call   0xbf9a18 <free>
        75 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
        76 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
        77 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
0xbf7be8  <+0x002c>         mov    %esi,0x8(%ebp)
0xbf7bf2  <+0x0036>         jmp    0xbf9a18 <free>
        78 in ../../../gcc-4.4.0/libgcc/../gcc/emutls.c
0xbf7beb  <+0x002f>         add    $0x1c,%esp
0xbf7bee  <+0x0032>         pop    %ebx
0xbf7bef  <+0x0033>         pop    %esi
0xbf7bf0  <+0x0034>         pop    %edi
0xbf7bf1  <+0x0035>         leave
Окно стека вот такое:
Записан
V1KT0P
Гость
« Ответ #9 : Сентябрь 28, 2012, 09:01 »

После сегфолта выдает дизасм:
Окно стека вот такое:
Надо было в окне стека столбцы сильнее сузить, а то слишком широкие.
Как я понял emutls.c это какой-то код для работы с TLS. И скорее всего этот код хочет OpenSSL, подымись по стеку и посмотри кто вызывает этот код и почему.
Записан
gogi
Гость
« Ответ #10 : Сентябрь 28, 2012, 10:10 »

Я ж говорю, на 4.7.4 работает без багов, на 4.8.1 с SSL тоже багов не обнаружено.
А кто тебе безбажность 4.8.1 обещал? Вон на багтрекере можно вычитать, что люди до сих пор сидят на 4.7.x, а всё потому, что даже в 4.8.3 есть эпичные баги отрисовки!
Записан
RedDog
Гость
« Ответ #11 : Сентябрь 28, 2012, 10:14 »

Лады, зайдем с другого боку:
могут ли влиять либы SSL, которые лежать в папке mingw\lib, а так же хедеры SLL, лежащие в исходниках, при статической сборке без поддержки SSL?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Сентябрь 28, 2012, 10:20 »

Лады, зайдем с другого боку:
могут ли влиять либы SSL, которые лежать в папке mingw\lib, а так же хедеры SLL, лежащие в исходниках, при статической сборке без поддержки SSL?
Такая логика мало применима. Любое изменение может вызвать баг. Напр меняется расклад памяти - неинициализированная область была заполнена нулями и благополучно работала (иногда годы). А теперь уже нет. И таких примеров не один. Отлаживайтесь, гадая на кофейной гуще Вы только теряете время
Записан
RedDog
Гость
« Ответ #13 : Сентябрь 28, 2012, 14:04 »

Собственно многопоточность тут не при чем.
Создал пустой ГУИ проект с одной формой (сам никакого кода вообще не писал), собрал, запустил, закрыл форму - получил сегфолт с таким же выводом дизасма.
Судя по отладке прошлого многопоточное приложения, что то в цикле обработке событий нарушено.
Записан
Sancho_s_rancho
Гость
« Ответ #14 : Сентябрь 28, 2012, 14:12 »

Погугли на тему emutls.c bug. Может это твой случай.
В gcc баги тоже случаются.
« Последнее редактирование: Сентябрь 28, 2012, 14:14 от Sancho_s_rancho » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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