Page 1 of 5

Падение под Windows XP (+отладочный лог)

PostPosted: Mon Sep 12, 2011 7:47 am
by DVV
Ниже представлена информация из gdb, соответствующая запуску отладочной версии GoldenDict (из архива GoldenDict.Debug.To.Try.rar) из-под Windows XP SP3 x86 и падению после поиска первого же слова:
Code: Select all
GNU gdb (GDB) 7.2
Copyright (C) 2010 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 "mingw32".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from C:\Progs\Progs\GoldenDict/GoldenDict.exe...done.
(gdb) run
Starting program: C:\Progs\Progs\GoldenDict/GoldenDict.exe
[New Thread 3572.0xf30]
[New Thread 3572.0xee4]
QObject::connect: Connecting from COMPAT signal (QAction::activated())
QObject::connect: Connecting from COMPAT signal (QAction::activated())
QObject::connect: Connecting from COMPAT signal (QAction::activated())
QObject::connect: Connecting from COMPAT signal (QAction::activated())
QObject::connect: Connecting from COMPAT signal (QAction::activated())
QObject::connect: Connecting from COMPAT signal (QAction::activated())
QObject::connect: Connecting from COMPAT signal (QAction::activated())
QObject::connect: Connecting from COMPAT signal (QAction::activated())
QObject::connect: Connecting from COMPAT signal (QAction::activated())
QObject::connect: Connecting from COMPAT signal (QAction::activated())
QObject::connect: Connecting from COMPAT signal (QAction::activated())
[New Thread 3572.0x7b4]
Load done
[New Thread 3572.0xd2c]
getResource: gdlookup://localhost?blank=1
scheme: gdlookup
host: localhost
getResource: gdlookup://localhost?word=
scheme: gdlookup
host: localhost
In-place finish.
[New Thread 3572.0x8fc]
[New Thread 3572.0x61c]
[New Thread 3572.0x2ac]
[New Thread 3572.0x57c]
====reading 53820 bytes
getResource: gdlookup://localhost?word=transformer&group=1
scheme: gdlookup
host: localhost
alts finished
some body finished
one not finished.
offset = 3f4cdb6
====reading 51990 bytes
offset = 49e960e
warning: HEAP[GoldenDict.exe]:
warning: Invalid Address specified to RtlFreeHeap( 003E0000, 0D4826D8 )


Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to Thread 3572.0x57c]
0x7c90120f in ntdll!DbgUiConnectToDbg () from F:\WINDOWS\system32\ntdll.dll
(gdb) bt
#0  0x7c90120f in ntdll!DbgUiConnectToDbg ()
   from F:\WINDOWS\system32\ntdll.dll
#1  0x7c96e4b1 in ntdll!RtlpNtMakeTemporaryKey ()
   from F:\WINDOWS\system32\ntdll.dll
#2  0x7c96e8ee in ntdll!RtlpNtMakeTemporaryKey ()
   from F:\WINDOWS\system32\ntdll.dll
#3  0x7c96fad6 in ntdll!RtlpNtMakeTemporaryKey ()
   from F:\WINDOWS\system32\ntdll.dll
#4  0x7c94bb44 in ntdll!LdrFindEntryForAddress ()
   from F:\WINDOWS\system32\ntdll.dll
#5  0x003e0000 in ?? ()
#6  0x7c91b1ff in ntdll!RtlStartRXact () from F:\WINDOWS\system32\ntdll.dll
#7  0x003e0000 in ?? ()
#8  0x77c1c2de in msvcrt!free () from F:\WINDOWS\system32\msvcrt.dll
#9  0x003e0000 in ?? ()
#10 0x6e94444d in libgcc_s_dw2-1!_Unwind_DeleteException ()
   from C:\Progs\Progs\GoldenDict\libgcc_s_dw2-1.dll
#11 0x005ccc50 in __cxxabiv1::__cxa_end_catch ()
    at ../../../../gcc-4.4.0/libstdc++-v3/libsupc++/eh_catch.cc:122
#12 0x0047e6b5 in Dsl::Details::ArticleDom::ArticleDom (this=0xea3fdf8,
    str=...) at dsl_details.cc:375
#13 0x004742c9 in Dsl::(anonymous namespace)::DslDictionary::dslToHtml (
    this=0xd4a8118, str=...) at dsl.cc:671
#14 0x00478897 in Dsl::(anonymous namespace)::DslArticleRequest::run (
    this=0xd5e8978) at dsl.cc:1055
#15 0x0047856a in Dsl::(anonymous namespace)::DslArticleRequestRunnable::run (
    this=0xdb8ee80) at dsl.cc:990
#16 0x6a10cadc in QThreadPoolThread::run (this=0xd583808)
    at c:\ndk_buildrepos\qt-desktop\src\corelib\concurrent\qthreadpool.cpp:106
#17 0x6a117175 in QThreadPrivate::start (arg=0xd583808)
    at c:\ndk_buildrepos\qt-desktop\src\corelib\thread\qthread_win.cpp:315
#18 0x77c2a3b0 in msvcrt!_endthreadex () from F:\WINDOWS\system32\msvcrt.dll
#19 0x7c80b729 in KERNEL32!GetModuleFileNameA ()
   from F:\WINDOWS\system32\kernel32.dll
#20 0x00000000 in ?? ()
(gdb)


Сначала стабильно падало при первом поиске после каждого запуска (вводил команду run несколько раз в одном и том же запущенном gdb).
Сейчас перезапустил gdb, вводил разные слова минут пятнадцать - и вот результат (последние строки в консоли):
Code: Select all
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
====reading 54134 bytes
getResource: gdlookup://localhost?word=knowledge acquisition supporter&group=1
scheme: gdlookup
host: localhost
alts finished
some body finished
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one not finished.
offset = 150c308
some body finished
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
====reading 53072 bytes
getResource: gdlookup://localhost?word=knowledge base&group=1
scheme: gdlookup
host: localhost
alts finished
some body finished
one finished.
erasing..
offset = 25f7a0e
offset = 150c3be
offset = 610fde
offset = 242a214
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
In-place finish.
getResource: gdlookup://localhost?word=knowledge base computer&group=1
scheme: gdlookup
host: localhost
alts finished
some body finished
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one not finished.
offset = 150c426
getResource: gdlookup://localhost?word=knowledge base machine&group=1
scheme: gdlookup
host: localhost
alts finished
some body finished
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
offset = 150c4c6
one finished.
erasing..
erase done..
one not finished.
some body finished
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
some body finished
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
one finished.
erasing..
erase done..
====reading 53149 bytes
getResource: gdlookup://localhost?word=trust&group=1
scheme: gdlookup
host: localhost
alts finished
some body finished
one not finished.
offset = 4abe284
offset = 3fd71f8
====reading 51984 bytes
warning: HEAP[GoldenDict.exe]:
warning: Invalid Address specified to RtlFreeHeap( 003E0000, 108D5AC8 )


Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to Thread 2404.0x564]
0x7c90120f in ntdll!DbgUiConnectToDbg () from F:\WINDOWS\system32\ntdll.dll
(gdb) bt
#0  0x7c90120f in ntdll!DbgUiConnectToDbg ()
   from F:\WINDOWS\system32\ntdll.dll
#1  0x7c96e4b1 in ntdll!RtlpNtMakeTemporaryKey ()
   from F:\WINDOWS\system32\ntdll.dll
#2  0x7c96e8ee in ntdll!RtlpNtMakeTemporaryKey ()
   from F:\WINDOWS\system32\ntdll.dll
#3  0x7c96fad6 in ntdll!RtlpNtMakeTemporaryKey ()
   from F:\WINDOWS\system32\ntdll.dll
#4  0x7c94bb44 in ntdll!LdrFindEntryForAddress ()
   from F:\WINDOWS\system32\ntdll.dll
#5  0x003e0000 in ?? ()
#6  0x7c91b1ff in ntdll!RtlStartRXact () from F:\WINDOWS\system32\ntdll.dll
#7  0x003e0000 in ?? ()
#8  0x77c1c2de in msvcrt!free () from F:\WINDOWS\system32\msvcrt.dll
#9  0x003e0000 in ?? ()
#10 0x6e94444d in libgcc_s_dw2-1!_Unwind_DeleteException ()
   from C:\Progs\Progs\GoldenDict\libgcc_s_dw2-1.dll
#11 0x005ccc50 in __cxxabiv1::__cxa_end_catch ()
    at ../../../../gcc-4.4.0/libstdc++-v3/libsupc++/eh_catch.cc:122
#12 0x0047e6b5 in Dsl::Details::ArticleDom::ArticleDom (this=0xe83fdf8,
    str=...) at dsl_details.cc:375
#13 0x004742c9 in Dsl::(anonymous namespace)::DslDictionary::dslToHtml (
    this=0xd4acce0, str=...) at dsl.cc:671
#14 0x00478897 in Dsl::(anonymous namespace)::DslArticleRequest::run (
    this=0xd567778) at dsl.cc:1055
#15 0x0047856a in Dsl::(anonymous namespace)::DslArticleRequestRunnable::run (
    this=0xd5ea118) at dsl.cc:990
#16 0x6a10cadc in QThreadPoolThread::run (this=0xd581fb0)
    at c:\ndk_buildrepos\qt-desktop\src\corelib\concurrent\qthreadpool.cpp:106
#17 0x6a117175 in QThreadPrivate::start (arg=0xd581fb0)
    at c:\ndk_buildrepos\qt-desktop\src\corelib\thread\qthread_win.cpp:315
#18 0x77c2a3b0 in msvcrt!_endthreadex () from F:\WINDOWS\system32\msvcrt.dll
#19 0x7c80b729 in KERNEL32!GetModuleFileNameA ()
   from F:\WINDOWS\system32\kernel32.dll
#20 0x00000000 in ?? ()
(gdb)

Re: Падение под Windows XP (+отладочный лог)

PostPosted: Mon Sep 12, 2011 7:56 am
by ikm
Версия программы?

Re: Падение под Windows XP (+отладочный лог)

PostPosted: Mon Sep 12, 2011 8:00 am
by DVV
ikm wrote:Версия программы?

1.0.1-145-gc5693df, взята отсюда:
viewtopic.php?f=4&t=1196&p=5236&hilit=debug+version#p5235

Re: Падение под Windows XP (+отладочный лог)

PostPosted: Fri Sep 16, 2011 11:25 am
by DVV
Есть ли какой-то прогресс в обнаружении ошибки? Могу ли я чем-то помочь?

Re: Падение под Windows XP (+отладочный лог)

PostPosted: Fri Sep 16, 2011 6:20 pm
by ikm
Сколько dsl-словарей находится в активной группе в момент поиска? Если их несколько, то изменит ли что-то выключение их всех, кроме любого одного?

Re: Падение под Windows XP (+отладочный лог)

PostPosted: Sat Sep 17, 2011 9:52 am
by DVV
Отчитываюсь :) Обычно использую группу "en", в которой 16 словарей. Физически файлы этих словарей находятся в следующих подпапках: "en-en" (2 словаря), "en-ru" (6 словарей), "la-ru" (2), "ru-en" (6). Описанные выше логи были получены при работе со всей группой "en" с поиском английский и русских слов вперемешку (просто для протокола: в самом первом случае, когда программа падала на первом же поиске, искалось английское слово).
Сегодня попробовал оставить активным только один русско-английский словарь. То есть все остальные словари группы "en" я деактивировал (отжал их кнопки на панели словарей). Набил порядка сотни разных русских слов (с показом английского перевода), и ничего не упало.
После этого активировал все словари группы "en" (вжал все кнопки на панели словарей) и продолжил набивать русские слова. Где-то через пол-сотни слов программа упала с той же ошибкой, что в приведенных выше логах.
Надо думать, проблема связана с использованием нескольких словарей.
Все словари в формате .dsl.dz (только в другой группе - "es" - присутствуют .dict.dz)

Re: Падение под Windows XP (+отладочный лог)

PostPosted: Sat Sep 17, 2011 10:16 am
by Abs62
Надо думать, проблема связана с использованием нескольких словарей.

Думаю, проблема связана в первую очередь с нарушением межпотоковой синхронизации. А количество словарей влияет на вероятность падения. Больше словарей - больше потоков, больше шансов нарваться на глюк.

Re: Падение под Windows XP (+отладочный лог)

PostPosted: Sat Sep 17, 2011 10:03 pm
by ikm
Похоже, что это опять mingw чудит с параллельной обработкой исключений в разных потоках. Интересно, какой версией Qt SDK была собрана версия GD, которая дает эту ошибку?

Re: Падение под Windows XP (+отладочный лог)

PostPosted: Sun Sep 18, 2011 11:19 am
by Tvangeste
Если это я собирал, то вот:

Code: Select all
g++ -v
Using built-in specs.
Target: mingw32
Configured with: ../gcc-4.4.0/configure --enable-languages=c,ada,c++,fortran,java,objc,obj-c++ --disable-sjlj-exceptions --enable-shared --enable-libgcj --enable-libgomp --with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --prefix=/mingw --with-gmp=/mingw/src/gmp/root --with-mpfr=/mingw/src/mpfr/root --build=mingw32
Thread model: win32
gcc version 4.4.0 (GCC)

Re: Падение под Windows XP (+отладочный лог)

PostPosted: Mon Sep 19, 2011 12:40 am
by ikm
В общем, не нравится мне всё это. Надо другой тулчейн использовать - либо более новый, либо более старый. Всё они никак нормально исключения не наладят. В прошлые разы проблема была в первоначальной инициализации этого механизма (и она была обойдена в коде GD). Теперь вот опять что-то сломано.

Когда я в прошлый раз репортил баг про первоначальную инициализацию исключений в багтрекер Qt, мне написали, что это не их проблемы, а проблемы mingw. Вообще они, похоже, просто не глядя берут последнюю версию mingw для каждого из релизов SDK и почему-то считают, что баги в mingw никакого отношения к пользователям SDK не имеют.