Анализ Дампа ядра Соляриса

Просто хотел исправить ошибку, с которой я столкнулся в этом ответе.

Обратите внимание, что instanceof исключает либо (obj), либо имя класса без кавычек

$images instanceof Illuminate\Database\Eloquent\Collection

Также интересно, что с instanceof по is_a существует разница скорости и производительности, но это, вероятно, не относится к вам, если вы похожи на меня и в первую очередь искали ответ на этот вопрос.

17
задан Matt Curtis 30 October 2008 в 03:55
поделиться

6 ответов

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

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

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

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

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

17
ответ дан 30 November 2019 в 12:45
поделиться

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

Для dbx, рецепт:

% dbx a.out core
(dbx) where
(dbx) threads
(dbx) thread t@3
(dbx) where
3
ответ дан 30 November 2019 в 12:45
поделиться

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

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

3
ответ дан 30 November 2019 в 12:45
поделиться

GDB может использоваться.

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

http://sourceware.org/gdb/

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

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

Работавший отлично для меня в прошлом.

1
ответ дан 30 November 2019 в 12:45
поделиться

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

1
ответ дан 30 November 2019 в 12:45
поделиться

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

dbx [executable_file_name] [coredump_file_name]

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

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

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

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

Весело проводят время.

1
ответ дан 30 November 2019 в 12:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: