#210 closed баг (fixed)
Падение при завершении программы - 3
Reported by: | alx | Owned by: | dimag |
---|---|---|---|
Priority: | major | Milestone: | 2 очередь |
Component: | ПО MC04-Dispatcher. Пульт диспетчера/техника | Keywords: | coredump, login |
Cc: | san |
Description
Запустили программу, вошли в сеть и сразу завершили. Результат - исключение std::bad_alloc:
ESL Connected Window Icon setted MainAppFrameWindow2 ctor pLogViewWidget created pSplitterSoundPlay created Main Window created CUSTOM - sofia::register - 111 BACKGROUND_JOB - CHANNEL_CALLSTATE - CS_HANGUP-HANGUP-outbound-HANGUP CHANNEL_CALLSTATE - CS_ROUTING|RINGING| CHANNEL_CALLSTATE - CS_HANGUP-HANGUP-inbound-HANGUP CHANNEL_CALLSTATE - CS_HANGUP-HANGUP-outbound-HANGUP Qt has caught an exception thrown from an event handler. Throwing exceptions from an event handler is not supported in Qt. You must reimplement QApplication::notify() and catch all exceptions there. terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc PRESENCE_IN - Аварийный останов (сделан дамп памяти)
Вот что сказал gdb (к сожалению программа была собрана без отладочной информации):
Reading symbols from ./MC04Dispatcher...(no debugging symbols found)...done. [New LWP 22259] [New LWP 22253] [New LWP 22256] [New LWP 22257] [New LWP 22261] [New LWP 22260] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Core was generated by `./MC04Dispatcher'. Program terminated with signal SIGABRT, Aborted. #0 0x00007fbcc4742418 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54 54 ../sysdeps/unix/sysv/linux/raise.c: Нет такого файла или каталога. [Current thread is 1 (Thread 0x7fbcba1bd700 (LWP 22259))] (gdb) bt #0 0x00007fbcc4742418 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54 #1 0x00007fbcc474401a in __GI_abort () at abort.c:89 #2 0x00007fbcc508484d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #3 0x00007fbcc50826b6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #4 0x00007fbcc5082701 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #5 0x00007fbcc5082969 in __cxa_rethrow () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #6 0x00007fbcc571d6ee in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4 #7 0x00007fbcc560c549 in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4 #8 0x00007fbcc560ee3c in ?? () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4 #9 0x00007fbcc537e6fa in start_thread (arg=0x7fbcba1bd700) at pthread_create.c:333 #10 0x00007fbcc4813b5d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
Change History (16)
comment:1 by , 8 years ago
comment:3 by , 8 years ago
comment:4 by , 8 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
Не удалось воспроизвести в r251
comment:5 by , 8 years ago
Resolution: | invalid |
---|---|
Status: | closed → reopened |
follow-up: 7 comment:6 by , 8 years ago
Дим, если не удаётся воспроизвести баг, не закрывай тикет, а пиши в комментарии "не удалось воспроизвести". Возможно что баг проявится ещё у какого-нибудь пользователя.
А если долгое время он так и не воспроизведётся, обсудим и закроем как "воркс фо ми"
follow-up: 8 comment:7 by , 8 years ago
Replying to san:
Возможно что баг проявится ещё у какого-нибудь пользователя.
Добавлю, что, даже если не удается воспроизвести баг, полезно провести анализ кода, определив хотя бы приблизительно возможные причины возникновения бага. Во-первых, есть ненулевая вероятность обнаружить ошибку прямо в процессе этого анализа. Во-вторых, определив вероятные места возникновения проблемы, можно придумать что-то чтобы
a) минимизировать возможные последствия проблемы (например, программа не должна падать, если для выполнения какой-то операции ей не хватило памяти - не зря же Qt открытым текстом говорит:
You must reimplement QApplication::notify() and catch all exceptions there.
)
и b) подготовиться к новому появлению бага - например добавить какой-то отладочный вывод в каких-то ключевых местах, чтобы не просто ждать подтверждения самого факта, что баг по-прежнему присутствует, и у пользователя программа опять упала, а чтобы такое падение дало какую-то полезную дополнительную информацию для нахождения и исправления бага.
Вот когда эта работа (анализ и подготовка) проведена - тогда можно сказать: "я сделал все что мог", и ждать результата...
comment:9 by , 8 years ago
Воспроизвёл что-то подобное, показал Диме. Новой информации для размышлений не добавилось по причине #219
comment:10 by , 8 years ago
Keywords: | login added |
---|---|
Resolution: | → fixed |
Status: | reopened → closed |
comment:11 by , 8 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Очень лаконично закрыл )
В чём была проблема? как исправил?
follow-up: 13 comment:12 by , 8 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
Проблема с мьютексами, сейчас я исправил работу с мьютексами по вашим рекомендациям, сделал один глобальный мьютекс.
follow-up: 14 comment:13 by , 8 years ago
Replying to dimag:
Проблема с мьютексами,
??? А где в changeset:261 хоть слово, касающееся мьютекса? Я вижу только какие-то исправления, касающиеся инкремента итераторов, и в 4 местах закомментарен вызов free()...
comment:14 by , 8 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Replying to alx:
??? А где в changeset:261 хоть слово, касающееся мьютекса?
Ну, раз ответа нет, будем считать вопрос риторическим. :)
comment:15 by , 8 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
Забыл уточнить - это r244.