Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: RedDog от Сентябрь 26, 2012, 15:07



Название: 4.8.1 Многопоточность глючит
Отправлено: RedDog от Сентябрь 26, 2012, 15:07
Собрал в статику под виндой сабж с поддержкой OpenSSL.  (по вики собирал)
Скопировал эту сборку в другую папку, очистил, пересобрал но без OpenSSL.
Есть некоторый многопоточный проект (с SSL никак не связанный):
1. Собираю с OpenSSL.
2. Собираю без  OpenSSL.
в 1-м случае нормально работает, но требует SSL либы рядом положить.
во 2-м случае крашится при выходе из потока.
проект отлаженный в 4.7.4 работал месяца 3 в режиме 24х7 вообще без глюков.
В чем может быть причина такой кривой сборки?


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: Пантер от Сентябрь 26, 2012, 15:11
В кривой программе?


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: RedDog от Сентябрь 26, 2012, 16:03
В кривой программе?
Я ж говорю, на 4.7.4 работает без багов, на 4.8.1 с SSL тоже багов не обнаружено.


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: V1KT0P от Сентябрь 26, 2012, 20:52
В кривой программе?
Я ж говорю, на 4.7.4 работает без багов, на 4.8.1 с SSL тоже багов не обнаружено.
Ну а что бэктрейс при падении говорит?


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: RedDog от Сентябрь 27, 2012, 10:58
Ну а что бэктрейс при падении говорит?
знать бы еще как им пользоваться...


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: V1KT0P от Сентябрь 27, 2012, 20:45
Ну а что бэктрейс при падении говорит?
знать бы еще как им пользоваться...
Запускаешь дебажную версию под дебагером, когда падает смотришь бэктрейс и видишь где упало. Если не можешь понять почему то выкладываешь здесь бэктрейс и кто-нибудь да подскажет куда копать.


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: LisandreL от Сентябрь 28, 2012, 05:47
Запускаешь дебажную версию под дебагером
Вы думаете он статическую версию с дебагом делал?


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: V1KT0P от Сентябрь 28, 2012, 08:31
Запускаешь дебажную версию под дебагером
Вы думаете он статическую версию с дебагом делал?
Даже если вдруг и не делал, то в чем проблема сделать?


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: RedDog от Сентябрь 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
Окно стека вот такое:


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: V1KT0P от Сентябрь 28, 2012, 09:01
После сегфолта выдает дизасм:
Окно стека вот такое:
Надо было в окне стека столбцы сильнее сузить, а то слишком широкие.
Как я понял emutls.c это какой-то код для работы с TLS. И скорее всего этот код хочет OpenSSL, подымись по стеку и посмотри кто вызывает этот код и почему.


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: gogi от Сентябрь 28, 2012, 10:10
Я ж говорю, на 4.7.4 работает без багов, на 4.8.1 с SSL тоже багов не обнаружено.
А кто тебе безбажность 4.8.1 обещал? Вон на багтрекере можно вычитать, что люди до сих пор сидят на 4.7.x, а всё потому, что даже в 4.8.3 есть эпичные баги отрисовки!


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: RedDog от Сентябрь 28, 2012, 10:14
Лады, зайдем с другого боку:
могут ли влиять либы SSL, которые лежать в папке mingw\lib, а так же хедеры SLL, лежащие в исходниках, при статической сборке без поддержки SSL?


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: Igors от Сентябрь 28, 2012, 10:20
Лады, зайдем с другого боку:
могут ли влиять либы SSL, которые лежать в папке mingw\lib, а так же хедеры SLL, лежащие в исходниках, при статической сборке без поддержки SSL?
Такая логика мало применима. Любое изменение может вызвать баг. Напр меняется расклад памяти - неинициализированная область была заполнена нулями и благополучно работала (иногда годы). А теперь уже нет. И таких примеров не один. Отлаживайтесь, гадая на кофейной гуще Вы только теряете время


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: RedDog от Сентябрь 28, 2012, 14:04
Собственно многопоточность тут не при чем.
Создал пустой ГУИ проект с одной формой (сам никакого кода вообще не писал), собрал, запустил, закрыл форму - получил сегфолт с таким же выводом дизасма.
Судя по отладке прошлого многопоточное приложения, что то в цикле обработке событий нарушено.


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: Sancho_s_rancho от Сентябрь 28, 2012, 14:12
Погугли на тему emutls.c bug. Может это твой случай.
В gcc баги тоже случаются.


Название: Re: 4.8.1 Многопоточность глючит
Отправлено: V1KT0P от Сентябрь 28, 2012, 20:50
Собственно многопоточность тут не при чем.
Создал пустой ГУИ проект с одной формой (сам никакого кода вообще не писал), собрал, запустил, закрыл форму - получил сегфолт с таким же выводом дизасма.
Судя по отладке прошлого многопоточное приложения, что то в цикле обработке событий нарушено.
Попробуй взять другую версию MinGW или даже другую сборку, например niXman-овскую.