|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||
Terminate called without an active exception12.01.2020, 17:16. Показов 34078. Ответов 73
Метки нет (Все метки)
При компиляции такого примера:
Санитайзеры включены: set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") Но без них врде тоже самое. Что я делаю не так ?
0
|
|||||||
| 12.01.2020, 17:16 | |
|
Ответы с готовыми решениями:
73
Terminate called С++ Ошибка: terminate called after throwing an instance of 'std::bad_alloc'
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 13.01.2020, 09:58 | |
|
squareroot, на самом деле мне кажется я выше дал ясно понять, что ни PTHREAD_CANCEL_ASYNCHRONOUS на общих основаниях, ни tgkill, ни TerminateThread - не являются теми решениями, которые можно назвать хорошими.
Т.е. еще более прямо, если вы будете их централизованно использовать - вы никогда не получите стабильное приложение. Особенно в С++. PTHREAD_CANCEL_ASYNCHRONOUS из всего этого является самым мягким решением, потому что позволяет указать область, где прерывание в произвольном месте делать безопасно. Ваш код не работает скорее всего из-за того, что cancel в современном Linux реализуется через бросок исключения.
0
|
|
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||
| 13.01.2020, 14:33 [ТС] | |||
|
Решение должно решать поставленную задачу - завершать исполнение потока без завершения приложения. Как вы считаете, стоит попробовать вариант с tgkill или я могу столкнуться с анологичными побочными эффектами ? И если стоит, то как его лучше реализовать ? Обязательно ли "пробрсывать" tid из нутри в наружу.
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 13.01.2020, 14:49 | ||||
|
Единственный надежный вариант, при условии вероятности зависания - это отказаться от потоков. Добавлено через 6 минут
0
|
||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||
| 13.01.2020, 15:36 [ТС] | |||||
|
Я даже сам писал что тут вопрос торга. Добавлено через 17 минут DrOffset, Я больше склоняюсь к варианту с tgkill, чем к pthread_cancel потомучто если выдвигать требования к процедуре потока, либо не аллоцировать ресурсы динамически, либо не использовать обработчики исключений, то первый вариант создаёт меньше проблем при разработке процедуры потока. Вы так не считаете ? Все необходимые ресурсы можно выделить заранее или вести их учёт из основного потока. Добавлено через 11 минут И ещё непонятно, tgkill, оно вроде не посиксовый. POSIX не даёт инструментов уничтожения потока ? Добавлено через 3 минуты Если дело обстоит именно так, то pthread_cancel можно оставить в качестве говядины второй свежести для нелинуксовых посикс систем.
0
|
|||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||
| 13.01.2020, 17:33 | |||||
|
Добавлено через 45 секунд Добавлено через 1 минуту ![]() Добавлено через 6 минут С конкретно мьютексом все еще проще, он может остаться в нормальном, но залоченном состоянии. Но снаружи вы никак об этом не узнаете. По большом счету вы даже разлочить его не сможете, потому что делать это должен тот же поток, который вызывал lock. А потока этого уже нет. Добавлено через 3 минуты Самое страшное во всем этом: вы можете долгое время не видеть ошибки вообще. Т.е. все как-то так будет складываться, что сброс потока не будет иметь последствий. Это ни что иное, как мина замедленного действия, старательно заложенная вами самим.
0
|
|||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 13.01.2020, 17:39 [ТС] | ||
А кто нам мешаем "запилить" обработчик сигнала SGKILL для потока в качестве сапёра?
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||||
| 13.01.2020, 17:44 | |||||||
|
Например у вас в потоке вот такая функция выполняется, где-нибудь в цикле:
0
|
|||||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 13.01.2020, 17:55 [ТС] | ||
|
Как разруливать ситуацию и в каком потоке определяется спецификой конкретного приложения. Задача обёртки - проинформировать. Но если никто не мониторит ситуацию аварийного завершения потока, значит заблоченный мьютекс при принудительном завершении потока разработчика конечного приложения не волнует.
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||||
| 13.01.2020, 17:58 | ||||||
|
squareroot, вы видимо не поняли, что даже если разработчика волнует залоченный мьютекс - у него нет средств определить нужно ли его разлочить или не нужно.
В этом обработчике не будет никакой возможности узнать, где именно прервали поток
0
|
||||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
| 13.01.2020, 18:04 [ТС] | |
|
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 13.01.2020, 18:12 | ||||
![]() Ну не пишите уж откровенные-то глупости. Допустим try_lock - он работает, потому что мьютекс в коректном залоченном состоянии. Дальше что? Он будет долбиться в него бесконечно, потом unlock имеет право делать только поток, вызвавший lock. Я уж не говорю, про неизвестное, "промежуточное" состояние, когда поток прервали посреди работы функции lock. Вот цитаты из документации Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Это пустой звук для вас?
0
|
||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
| 13.01.2020, 18:15 [ТС] | |
|
DrOffset, вообще говоря наиболее ожидаемое поведение при принудительном завершении потока это завершение приложения, но не аварийное завершение как в случае pthread_cancel и catch(...) {} а нормальное, с сохранием в логах ошибки из-за которой завершается приложение. Но наверно есть способ справится с залоченным мьютексом системными средствами, если разработчик конечного приложения сделает восстановления после сбоя без завершения приложения.
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 13.01.2020, 18:22 | ||
|
Таких ситуаций множество, некоторые можно решить, некоторые нет. Самое страшное, что неизвестно как решать. Было бы гораздо проще, если бы программа точно знала что она делала до завершения. Но знать это нельзя в общем случае, о чем красноречиво пишут в документации.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||
| 13.01.2020, 18:46 [ТС] | |||
|
Даже если допустим поток испльзует сокет и он останется в неизвестном состоянии после завершения потока. Всегда можно спросить файловые хендлы у ОС для данного процесса и по тихому закрыть, те что стали "зомби."
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 13.01.2020, 19:18 | |||
|
А вот вам, раз уж вы пишете SDK - не позволительно слишком оптимистично к этому относиться. Так что смотрите. Добавлено через 17 минут Вообще говоря, я уже проходил ваш путь (только без помощи форумов). Т.е. я исследовал возможности построить стабильную систему с произвольным кодом внутри потоков, с возможностью остановки потоков в случае проблем. Так вот, со всей ответственностью заявляю: в построить такую систему на потоках - нельзя. В частном случае - можно. В общем - нельзя. Собственно я не знаю, для какой задачи вы это пишете. Если для себя, вы, конечно же можете и не узнать о всем спектре проблем. Если для серьезного продакшена, то проблемы возникнут очень скоро. Так что, вы можете, конечно, учиться на своих ошибках, но лучше это делать на чужих.
0
|
|||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||
| 13.01.2020, 19:40 [ТС] | |||||||
|
DrOffset, У меня щас недостаточно знаний и опыта чтобы сделать грамотно на уровне процессов, а халтуру делать нехочу и не хочется на этом сильтно зацикливоться.
Завершение потока у меня не получается:
В документации сказано: http://man7.org/linux/man-page... ill.3.html
Добавлено через 9 минут Завершается процесс, а не поток.
0
|
|||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 13.01.2020, 20:50 | ||
|
<в примере ошибка, поторопился>
Добавлено через 35 минут
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 13.01.2020, 23:18 [ТС] | ||
|
Добавлено через 45 минут А впрочем я нашёл ответ, что после форка, только один поток остаётся в новом процессе. Выходит поток убить можно через процесс клонирование процесса
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 13.01.2020, 23:20 | ||
|
Для того, чтобы продублировать все потоки есть системный вызов forkall, но я его встречал только в Solaris.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||
| 14.01.2020, 01:15 [ТС] | |||||||
|
DrOffset, А покакой причине санитайзер после форка детектирует утечку памяти ?
Если форк не делать, то санитайзер утечку не фиксирует.
0
|
|||||||
| 14.01.2020, 01:15 | |
|
Не понимаю из-за чего выскакивает: terminate called after throwing instance of std bad_alloc Terminate called after throwing an instance of 'int' Aborted -Ошибка, как быть? Ошибка при повторном запуске: terminate called after throwing an instance of 'std::ios_base::failure' Ошибка при выполнении запроса к mysql (terminate called after throwing an instance of 'sql::SQLException')
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|