LINUX.ORG.RU

сделать coredump под FreeBSD


0

0

привет. мне надо сделать принудительный коредамп под фряхой программе, т.к. обработчик для сегфолта уже написан (а значит стандартное поведение уже не катит). в гугле искал - не нашел, может не по глазам, согласен, да. может кто подскажет? программа на С++.


Перехват SIGSEGV ведёт к UB. А корку можно получить SIGABRT-ом.

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

господа, вы меня не правильно поняли:). мне надо не как пользователю сделать коредамп процесса, а в обработчике SIGSEGV (т.е. в самой проге) сделать, чтобы помимо того, того и того она еще и коредамп скидывала. вот что я хочу. потому как в случае сегфолта из логов (своих внутренних) не поймешь в каком именно месте упала. в линуксе-то это вроде do_coredump, а для фряхи не по глазам в гугле че-то...

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

в обработчике sigsegv сними обработчик этого сигнала и пошли сигнал ещё раз. Или пошли в обработчике sigsegv сигнал который приводит к сбросу корки.

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

ненене, не красиво, имхо, или я чего-то не допонял в этой истории. мне нужно, чтобы в лог сбросился запрос, вызвавший сегфолт (будь я хорошим программистом, таких запросов бы не было:( ). ну да ладно, нужда заставила поискать получше. вот что нашел, если кому интересно: 1. вызов savecore (8) 2. гугловая либа, которая позволяет бросаться дампами, не роняя самого процесса http://code.google.com/p/google-coredumper/ ни одну еще не пробовал, но как попробую (в ближайшие пару часов), то обязательно отпишусь тут. ну а пока, если есть опыт или еще варианты, то я готов их рассмотреть.

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

че-то с savecore я погорячился - не то...

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

ну если бы gcore можно было снять дамп с дохлого процесса, то да, я бы рассмотрел такой вариант:). а гугловой либой не хочу пользоваться, ибо лишняя зависимость

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

Попробуй запомнить предыдущий хэндлер sigsegv и вызвать его. Правда, по-моему, это не должно сработать, но вдруг...

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

жду вот может мне на freebsd.org ответят... если ответят, то я тут отпишусь, мало ли кому еще понадобится.

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

имхо из обработчика сигнала вызывать другой сигнал костылёво как-то... но может я чего-то не понимаю в этой жизни.

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

к тому же, если не ошибаюсь, то SIGABRT является перехватываемым сигналом. и что будет, когда кто-нибудь для него обработчик напишет?

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

не нравится мне это решение (субъективно, ничего не могу поделать), но пока ни к спеху.

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