LINUX.ORG.RU

Ответ на: комментарий от Zorn

А каким образом подчистить? Это вам не ява, это Си++, тут свои порядки!

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

Внезапно, так делают многие программы, запуская «менеджер отчётов об ошибке». Можно даже автоматом слать core или бэктрейс на мыльник (если речь идёт о внутреннём ПО в компаниях)

Chaser_Andrey ★★★★★
()
signal(SIGSEGV, callback)

и погуглить при каких сигналах какая сигнатура колбэка

punya ★★
()
Ответ на: комментарий от Chaser_Andrey

Хм, возможно и да, но этого ли хочет ОП? Хотя подобное я в линуксах не видел. Отчеты об ошибках я вроде только в форточках наблюдал.

Dudraug ★★★★★
()
Ответ на: комментарий от Chaser_Andrey

Вопрос еще в том чего он хочет добится, просто я почему-то подумал, что продолжить работу приложения после сегфаулта.

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

Если ты этого не видел, то не значит, что этого нет.
Я как-то в новых KDE калькулятор уронил, так он кажется такой отчёт предлагал сделать.

gogi
()

Возможно. А смысл? :) Суть сегфолта (ты не понимаешь ее :) в том, что ноги уже нет - снесло выстрелом - идти дальше только на кладбище.

slackwarrior ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Можно продолжить, можно попытаться корректно завершиться.

Оба варианта в Си++ считаю бессмыслеными. Вот отправка отчета или трасу распечатать, вот это да смысл имеет я считаю.

Dudraug ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Можно продолжить агонию, можно попытаться корректно завершиться.

починил

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Например, корректно завершить раобту с открытыми устройствами?
Смысл в том, что по дороге на кладбище можно еще очень много хороших дел сделать.

trex6 ★★★★★
()
Ответ на: комментарий от trex6

Да. Крикнуть «Браток, добей!» и услышать «Спасибо, браток!»

slackwarrior ★★★★★
()

Посмотреть в сторону libsegfault.

hippi90 ★★★★★
()
Ответ на: комментарий от slackwarrior

Суть сегфолта (ты не понимаешь ее :) в том, что ноги уже нет - снесло выстрелом - идти дальше только на кладбище.

Глупости. Суть сегфолта - нарушение защиты памяти, не более. На SIGSEGV много чего интересного делали.

tailgunner ★★★★★
()

Вопрос в том, зачем тебе это нужно. В принципе, можно попробовать -fnon-call-exceptions, но зависит от цели упражнения.

tailgunner ★★★★★
()
Ответ на: комментарий от slackwarrior

Суть сегфолта (ты не понимаешь ее :) в том, что ноги уже нет - снесло выстрелом - идти дальше только на кладбище.

Собрать у себя автоматические отчеты с бэктрейсами вместо того, чтобы гадать, что там падает (или выпрашивать у пользователей). Такое, кстати, даже на ios возможно.

note173 ★★★★★
()
Ответ на: комментарий от note173

Собрать у себя автоматические отчеты с бэктрейсами

И посыпать голову пеплом :) С этой хренью и внешний перехват выпадающей коры справляется (см. core(5), /proc/sys/kernel/core_pattern и пайпинг в скрипт, автоматом загоняющий бедных Йорегов в gdb, который расспросит «дух отца Гамлета», который Клавдий набыдлокодил его кончину :) Причем тут телодвижения «в программе», как того надо ТСу?

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Ну, это все бывает недоступно. А поймать сегфолт и подготовить бэктрейс, который будет отправлен при следующем запуске, можно даже не такой ограниченной платформе, как ios (как я уже написал).

note173 ★★★★★
()
Ответ на: комментарий от trex6

А когда-то еще отвертку к лотку CD привязывали, чтобы фейловера добиться, потому что пришлось бы подойти и пальцем ресет нажать :) Устройство в студию из сферического вакуума :) Бином Ньютона, тоже изобрели... Некоторые сервера накатывают заново из бэкапа, иначе их пришлось бы руками настраивать. А еще - годами не фиксят баги в серваках, потому что багфикс не влезает в бюджет - проще скриптик в крон повесить, который ребутнет покрошенный сегфолтом сервак... И/или логи удалит... Но процесс удалить забудет - а потом бац, место кончилось, а удалять нечего - дескрипторы как были открыты на запись, так и остались(заполняясь невидимым сообщением про bad alloc... пионеры реально думают через libastral.so). Заскорузлый мир реального ынтерпрайза :)

slackwarrior ★★★★★
()
Ответ на: комментарий от note173

А кто тебе помешает юзать на билдсервере в песочнице специального пользователя? Который в СС (или твоем любимом «продолжающемся интегрейшне») крутит на... шедулере сборки серваков и обстреливает их тестами «на дымок»/нагрузку и прочую, например, функциональность - и ежли упало, на мыло/в rss команды быдлокодеров сыпется ругань, КРОВЬ, КИШКИ, СОДЕРЖИМОЕ СТЕКА...

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от slackwarrior

Как это поможет получить причину падения с компьютера или другого устройства конечного пользователя?

(Вообще, тестировать — хорошо, но все не протестируешь. Интеграционные тесты для сложных приложений с относительно некритичной стабильностью вообще редко имеет смысл писать.)

note173 ★★★★★
()
Ответ на: комментарий от true_admin

Я бы предложил переписать программу без сегфолтов

Батенька, вы в своем ли уме?

С++

anonymous
()
Ответ на: комментарий от note173

Как это поможет получить причину падения с компьютера или другого устройства конечного пользователя?

А не отправляй в продакшен сырой софт :)

редко имеет смысл писать

Вот эта психология и приводит к сосуществованию с багами, которые никто и не собирается исправлять... Пока пользователи например фреймворка, который девелоперы семь(!) лет в продакшен продавали «как есть» не начнут тыкать в глаза очевидными вещами, что форматную строку недостаточно проверять на длину (особенно если эта «проверка» тупо валит сервак там, где можно было кинуть исключение), а в некоторых местах в рантайме лучше все-таки иметь проверку на пустой указатель, пусть и в ущерб некоторой сферической в вакууме «производительности» - потому что быстрая производительность одних и тех же ошибок никому нахер не нужна (издержки на фейловер все равно больше издержек мифического «оверхеда»).

slackwarrior ★★★★★
()
Ответ на: комментарий от Dennis7

Можно попробовать как то так:

void* callstack[128];
int count = backtrace(callstack, 128);
char** s = backtrace_symbols(callstack, count);

// s and bla-bla-bla

free(s);

andreyu ★★★★★
()
Ответ на: комментарий от slackwarrior

Суть сегфолта (ты не понимаешь ее :) в том, что ноги уже нет - снесло выстрелом - идти дальше только на кладбище.

Сдается мне, ты можешь открыть для себя чудный мир применения одиннадцатого сигнала, скажем, в CLISP. И вообще

Catching and handling a page fault is a useful technique for implementing:
* pageable virtual memory,
* memory-mapped access to persistent databases,
* generational garbage collectors,
* stack overflow handlers,
* distributed shared memory,

red_eyed_peguin
()
Ответ на: комментарий от DELIRIUM

О_О Ты вообще понимаешь разницу между page fault и segmentation fault?

А ты понимаешь разницу между «вода» и H20? GPF он и в Африке GPF.

red_eyed_peguin
()
Ответ на: комментарий от red_eyed_peguin

ты можешь открыть для себя чудный мир применения одиннадцатого сигнала, скажем, в CLISP

в CLISP

Ггг. Могу, но... DO NOT WANT :)

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от DELIRIUM

Ты вообще понимаешь разницу между page fault и segmentation fault?

«If it makes sense to you, you've gor a problem» (c)

tailgunner ★★★★★
()
Ответ на: комментарий от slackwarrior

Могу, но... DO NOT WANT :)

Дешевая отмазка.

Catching and handling a page fault is a useful technique for implementing:
* pageable virtual memory,
* memory-mapped access to persistent databases,
* generational garbage collectors,
* stack overflow handlers,
* distributed shared memory,

Всё это делалось в Си/Си++.

tailgunner ★★★★★
()
Ответ на: комментарий от slackwarrior

А не отправляй в продакшен сырой софт

Добро пожаловать в реальный мир. Прикладное ПО оттестировать полностью невозможно, никогда.

note173 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.