LINUX.ORG.RU

Тонкая настройка core dump'ов


1

4

Когда приложение генерирует core-файл, то туда пишется множество ненужной мне информации (например sysv shared memory).

Никаких настроек по ограничению для core-файлов, кроме размеров, сгуглить не получается. Да их и нет, наверно.

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

В общем, если кто-то знает, куда можно покопать, буду признателен.

★★

подписался, тоже интересен ответ

тем более если нет отладочных символов внутри бинарника, и вообще версии библиотек чуточку отличаются - что же удастся почерпнуть из таких дампов

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

Нашел такую штуку в мане core(5)

Piping core dumps to a program

Since kernel 2.6.19, Linux supports an alternate syntax for the /proc/sys/kernel/core_pattern file. If the first character of this file is a pipe symbol (|), then the remainder of the line is interpreted as a program to be executed.

Т.е. можно перенаправить запись корки в свое приложение. Осталось понять, как «фильтровать» память.

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

в федоре (и RHEL6), есть такая штука - abrtd, она как раз в федоре по дефолту прописана через пайп в core_pattern. И занимается тем, что потрошит корку, рассовывает разные части по файлам, выдирает бектрейс и тоже кладёт его в отдельный файл. Можно либо её потюнить, либо покурить её исходники.

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

Стандартная корка хороша тем, что ее можно проанализировать стандартными средствами типа gdb. А чем анализировать «урезанную корку» ?

Может проще сделать человеческий обработчик на SIGSEGV/... в отлаживаемом приложении ?

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

Да, я уже посмотрел. В 17 федоре прописан некто abrt-hook-ccpp. Но RHEL6 тоже есть под рукой.

Буду изучать их возможности и исходники.

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

А я и не собираюсь отказываться от стандартных корок. Просто некоторых сегментов памяти не будет.

Человеческий обработчик сделать не так просто, да и что в нем можно сделать? В корке я хоть по памяти полазить могу, значения переменных посмотреть.

kulti ★★
() автор топика
Ответ на: комментарий от i-rinat

Это я уже нашел, мне хотелось бы еще тоньше: не всю шаред мемори выкинуть, а только sysv.

kulti ★★
() автор топика

В итоге отключил дампание anonymous shared memory для своих процессов:

echo 0x31 > /proc/self/coredump_filter

Та память, что в /dev/shm - неанонимная, а та, что sysv была как раз ушла из дампов.

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

PS. Посылать дампы по сети - опциональная возможность. Можно просто записывать в файл.

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

Чем проще?

1. Мы свою систему разворачиваем только на линукс-серварах, так что кросс-платформенность нам не нужна.

2. Мы используем стандартные core-dump, т.е. не используем никаких нестандартных тулзов или библиотек => упрощается разработка и поддержка.

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

Проще тем, что не нужно решать уже решенную задачу (генерация маленьких по размеру дампов). Сгенерированный minidump можно преобразовать в стандартный (minidump-2-core).

Ну и всякие дополнительные полезные вещи перечислены в wiki.

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