|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
||||||
Приложение завершается без каких-либо сообщений10.10.2016, 16:03. Показов 1955. Ответов 10
Метки нет (Все метки)
Есть консольное приложение. В процессе работы возникает некая ошибка приводящая к тому что приложение просто тихо завершается как будто само (в консоли появляется приглашение на ввод команды). На всякий случай на сигнал SIGSEGV поставлен обработчик
0
|
||||||
| 10.10.2016, 16:03 | |
|
Ответы с готовыми решениями:
10
Зависание приложение во время выполнения каких-либо операций Вылетают игры без каких либо ошибок
|
|
|
|
| 10.10.2016, 16:46 | |
|
Первое, что посоветую: привести обработчик сигналов в порядок. Он должен вызывать внутри себя только реентерабельные функции, поскольку обработчик сигнала не обязан вызываться в том же потоке, что и главная функция.
В вашем случае с этой точки зрения два косяка: вызов принтф-а (часть стандартного ввода-вывода -- не являются реентерабельными) и backtrace_symbols (вызывает внутри себя маллок). Пофиксите это, будем думать дальше.
0
|
|
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 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
|
|
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 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
|
|||||||
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 11.10.2016, 09:17 [ТС] | |
|
HighPredator, статья и руководство, конечно, погрузили меня в нюансы, но даже в соответствии с ними - если printf или возможно даже malloc более нигде кроме обработчика не используются - то их можно безопасно вызывать (хотя ознакомившись с материалом у любого нормального человека вообще отпадёт желание предполагать что-либо как это делает IBM по поводу начинки библиотечных функций и вызывать в обработчике что-либо кроме официально безопасных функций). То есть код условно безопасный. Тем более что когда он вызывается все и так идёт к чертям и не до сантиментов - программа все равно через мс перестанет существовать. Основной акцент на том что падение тихое - и с обработчиком и без
0
|
|
|
|
||
| 11.10.2016, 10:02 | ||
|
Добавлено через 31 секунду Дальше можно кордамп поковырять, мало ли чего
1
|
||
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 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
|
||
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
||
| 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, завершается после выполнения Происходит экстренное завершение приложения без каких-либо ошибок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|