|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
||||||
Приложение завершается без каких-либо сообщений10.10.2016, 16:03. Показов 1883. Ответов 10
Метки нет (Все метки)
Есть консольное приложение. В процессе работы возникает некая ошибка приводящая к тому что приложение просто тихо завершается как будто само (в консоли появляется приглашение на ввод команды). На всякий случай на сигнал SIGSEGV поставлен обработчик
0
|
||||||
| 10.10.2016, 16:03 | |
|
Ответы с готовыми решениями:
10
Зависание приложение во время выполнения каких-либо операций Вылетают игры без каких либо ошибок
|
|
|
|
| 10.10.2016, 16:46 | |
|
Первое, что посоветую: привести обработчик сигналов в порядок. Он должен вызывать внутри себя только реентерабельные функции, поскольку обработчик сигнала не обязан вызываться в том же потоке, что и главная функция.
В вашем случае с этой точки зрения два косяка: вызов принтф-а (часть стандартного ввода-вывода -- не являются реентерабельными) и backtrace_symbols (вызывает внутри себя маллок). Пофиксите это, будем думать дальше.
0
|
|
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
|
| 10.10.2016, 18:22 [ТС] | |
|
HighPredator
-printf заменить на вывод в файл - будет норм? -а как же без backtrace_symbols узнать где же я упал? Добавлено через 1 час 15 минут HighPredator, ещё раз подумал - если заложиться на то что принтф больше нигде в программе не идёт и падение происходит в одной точке то чем небезопасен приведённый код неясно
0
|
|
| 10.10.2016, 23:05 | |
|
Вы впоследствии устанавливаете дефолтный обработчик и пересылаете SIGSEGV самому себе. Под линухами обычно данный сигнал в дефолте не только завершает прогу, но и скидывает корку Segmentation fault (core dumped). Если корки нет - то видать прога вываливается по другому сигналу.
Попробуйте убрать backtrace и работу с кучей free(), а printf выводит допустим нечто вроде ("получен SIGSEGV для %i",getpid()) Тогда точно можно будет определить наличие SIGSEGV. З.Ы. не безопаснее ли использовать не signal() а sigaction(), или нужна совместимость с чем-то древним?
0
|
|
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
|
| 11.10.2016, 06:11 [ТС] | |
|
drfaust, тоже склоняюсь к тому что прилетает что-то другое, но что может так тихо ронять пока не понял. С sigaction просто не работал. А в чем крамола использования free в обработчике?
0
|
|
|
|
|||||||
| 11.10.2016, 08:21 | |||||||
|
Вот в каком ключе я обычно это делаю:
http://www.ibm.com/developerworks/library/l-reent/ (общая теория и некоторые примеры с пояснениями) http://man7.org/linux/man-pages/man7/signal.7.html (+ список реентерабельных функций, которые можно пользовать в обработчике сигналов) Добавлено через 1 минуту З.Ы. кстати вроде write пользовать можно..
1
|
|||||||
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
|
| 11.10.2016, 09:17 [ТС] | |
|
HighPredator, статья и руководство, конечно, погрузили меня в нюансы, но даже в соответствии с ними - если printf или возможно даже malloc более нигде кроме обработчика не используются - то их можно безопасно вызывать (хотя ознакомившись с материалом у любого нормального человека вообще отпадёт желание предполагать что-либо как это делает IBM по поводу начинки библиотечных функций и вызывать в обработчике что-либо кроме официально безопасных функций). То есть код условно безопасный. Тем более что когда он вызывается все и так идёт к чертям и не до сантиментов - программа все равно через мс перестанет существовать. Основной акцент на том что падение тихое - и с обработчиком и без
0
|
|
|
|
||
| 11.10.2016, 10:02 | ||
|
Добавлено через 31 секунду Дальше можно кордамп поковырять, мало ли чего
1
|
||
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
|
| 11.10.2016, 11:41 [ТС] | |
|
HighPredator, сейчас запустил через gdb run может он падение озвучит...
0
|
|
| 11.10.2016, 18:44 | ||
Сообщение было отмечено vxg как решение
РешениеСтоит в этот момент сделать хоть что-то с кучей в обработчике сигналов мы её уничтожаем, тут даже exit(1) не сработает(он, если не изменяет склероз попытается вернуть операционке всю занятую память, в том числе и для кучи, а её структуры разрушены - работа с кучей нереентабельна). завершить прогу удастся только с помощью abort() - а он файловые буфера не скидывает (возможна потеря/порча данных). Кто может втихую закрыть прогу? https://ru.wikipedia.org/wiki/... 1%8B_(UNIX) - есть список сигналов и их действия по дефолту. Надо смотреть кто из них "завершает без core dump". Почему sigaction? Он позволяет установить флаг SA_SIGINFO который вторым параметром (при использовании signal обработчик может получать только номер сигнала) может передать обработчику инфу, касательно данного сигнала - может оказаться при дебаге.
1
|
||
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
||
| 12.10.2016, 06:47 [ТС] | ||
Сообщение было отмечено vxg как решение
Решение
drfaust, из того списка сигналов которые завершают тихо по работе программы там может быть SIGPIPE ибо сокеты имеются, но разве запись в разорванное соединение - это завершение программы!? Что за бред - всего-то должно вернуть ошибку и пойти дальше... я не прав?
Добавлено через 13 минут drfaust, О БОЖЕ!!!! У send есть флажок который делает такое:
Добавлено через 10 часов 48 минут ...судя по документам так и есть - надо либо игнорировать сигнал либо слать флажок либо ставить опцию сокета. Никто не знает зачем они исторически сделали эту дикость включённой поумолчанию? Добавлено через 6 минут ...страсти в чашке воды
0
|
||
| 12.10.2016, 06:47 | |
|
Помогаю со студенческими работами здесь
11
Выполнение каких-либо действий в цикле, пока приложение не будет закрыто НЕ запускается без выдачи каких либо ошибок vs 2012 Приложение без интерфейса, с кодом в Program.cs, завершается после выполнения Происходит экстренное завершение приложения без каких-либо ошибок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение
Это мой обзор планшета X220 с точки зрения школьника.
Недавно я решила попытаться уменьшить свой. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|