Как использовать libumem для обнаружения повреждений кучи, не полагаясь на «основной» файл?

#c #memory #solaris #libumem

#c #память #solaris #libumem

Вопрос:

Я хочу знать, как использовать libumem в solaris. Если я последую http://www.unix.com/man-page/OpenSolaris/3malloc/umem_debug / и запустите процесс со всеми параметрами, как я получу результат?

Могу ли я получить текстовый файл результатов?

Я использовал wdb в HP-UX для того же. После завершения работы программы генерируется текстовый файл, который я могу проанализировать позже. Могу ли я сделать то же самое для libumem?

Примечание: Это удаленная отладка, у меня не будет доступа к системе до тех пор, пока это не произойдет.

Комментарии:

1. На данный момент я использую Solaris 9, поэтому Dtrace не поможет.

Ответ №1:

Вы можете создать основной файл процесса перед его завершением и позже изучить код с помощью mdb. Одним из способов сгенерировать этот файл core в нужный момент может быть скрипт dtrace, который запустит gcore сразу при вызове exit.

Комментарии:

1. Спасибо jlliagre, можете ли вы указать мне, с чего мне следует начать поиск такого скрипта? (кроме этого другого вопроса о stackoverflow, конечно!)

2. Извините, уточняю, что я пока на Solaris 9.

3. В Solaris 9 вы могли бы использовать библиотеку интерпозиции для перехвата вызова exit и запуска gcore там.

Ответ №2:

Я думаю, libumem сгенерирует ядро, когда что-то пойдет не так, вы можете проанализировать это ядро с помощью mdb, некоторые команды, такие как::umem_status , umem_verify , помогут вам в поиске повреждения