Вопрос

Я использую pstack для анализа файлов дампа ядра в Solaris

Как еще я могу проанализировать дамп ядра из solaris?

Какие команды можно использовать для этого?

Какая еще информация будет доступна из дампа?

Это было полезно?

Решение

Вы можете использовать модульный отладчик Solaris, mdb или dbx.mdb поставляется с пакетом SUNWmdb (или SUNWmdb x для 64-разрядной версии).

Основной файл - это образ вашего запущенного процесса на момент его сбоя.

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

В последних версиях solaris вы можете настроить, что будет содержать файл core, с помощью команды coreadm ;например, у вас могут быть сопоставленные сегменты памяти, к которым был присоединен процесс.

Обратитесь к Документация MDB и документация dbx.Тот Самый Краткий справочник по GDB карточка также полезна, если вы знакомы с основами GDB.

Другие советы

Я думаю, любой ответ на этот вопрос должен начинаться с простого рецепта:

Для dbx рецепт таков:

% dbx a.out core
(dbx) where
(dbx) threads
(dbx) thread t@3
(dbx) where

Если дамп ядра получен из программы, которую вы написали или собрали, используйте любой отладчик, который вы обычно используете для отладки запущенного приложения.Все они должны иметь возможность загружать основные файлы.Если вы не придирчивы к отладчикам и используете Solaris, я бы порекомендовал dbx.Это поможет получить последнюю версию Sun Studio FCS с исправлениями или же последнюю экспресс-версию Sun Studio.Также очень полезно, если вы можете загрузить основной файл в отладчик в той же системе, где был создан основной файл.Если код в библиотеках отличается от того, который был создан при создании основного файла, то трассировка стека не будет полезна при прохождении через библиотеки.Отладчики также используют вспомогательные библиотеки ОС для понимания структур данных libthread и runtime linker, поэтому, ЕСЛИ вам нужно загрузить файл ядра на другой компьютер, вы захотите убедиться, что вспомогательные библиотеки, установленные в ОС, соответствуют системным структурам данных в ОС.Вы можете узнать все, что никогда не хотели знать об этих системных библиотеках, в официальном документе, который был написан несколько лет назад.

http://developers.sun.com/solaris/articles/DebugLibraries/DebugLibraries_content.html

Я бы предложил сначала попробовать gdb, поскольку, на мой взгляд, с ним проще освоить базовые задачи, чем с родными отладчиками Solaris.

Можно использовать GDB.

Он может выдать вызов, который был предпринят до дампа.

http://sourceware.org/gdb/

http://en.wikipedia.org/wiki/GDB

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

В прошлом у меня это отлично получалось.

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

Прикрепите к процессу изображение с помощью dbx debugger:

dbx [имя_исполнимаго файла] [имя_файла_ ядра]

Важно, чтобы с момента сброса ядра в исполняемый файл не было внесено никаких изменений (т. е.он не был перестроен).

Вы можете просмотреть трассировку стека, чтобы увидеть, где произошел сбой программы с помощью команды dbx "where".

Вы можете перемещаться вверх и вниз по стеку с помощью команд "up" и "down" или перейти к точному кадру стека с помощью "frame [number]", с номерами, отображаемыми в выходных данных "where".

Вы можете распечатать значение переменных или выражений с помощью команды "print [expr]".

Получайте удовольствие.

Я нашел dbx в своей коробке solaris x86 по адресу

/opt/SUNWspro/bin/dbx

Ваше здоровье!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top