Что такое файл дампа ядра в Linux? Какую всю информацию он предоставляет?
Что такое файл дампа ядра в Linux? Какую информацию он предоставляет?
Ответы (2)
В основном это используемое адресное пространство процесса (из структуры mm_struct
, которая содержит все области виртуальной памяти) и любая другая вспомогательная информация * a на момент сбоя.
Например, предположим, что вы пытаетесь разыменовать указатель NULL и получаете сигнал SEGV, что приводит к выходу. В рамках этого процесса операционная система пытается записать вашу информацию в файл для последующего посмертного анализа.
Вы можете загрузить основной файл в отладчик вместе с исполняемым файлом (например, для символов и другой отладочной информации) и попытаться обнаружить причину проблемы.
* a: в версии ядра 2.6.38 _ 2_ отвечает за дампы ядра, и вы можете видеть, что он передал номер сигнала, код выхода и регистры. Он, в свою очередь, передает номер сигнала и регистры в дампер, зависящий от двоичного формата (ELF, a.out и т. Д.).
Дампер ELF - это fs/binfmt_elf.c/elf_core_dump()
, и вы можете видеть, что он выводит информацию, не связанную с памятью, такую как детали потока, в fs/binfmt_elf.c/fill_note_info()
, затем возвращается для вывода области процесса.
Если программа завершается ненормально, состояние программы на момент аварийного завершения должно быть записано для дальнейшего анализа. и этот статус записывается в файл дампа ядра.
В многопользовательской и многозадачной среде доступ к ресурсам, которые вам не принадлежат, неприемлем. Если процесс A пытается получить доступ к системным ресурсам, принадлежащим процессу B, это нарушение. В этот момент операционная система завершает процесс и сохраняет статус процесса в файл. И этот файл называется файлом дампа ядра. Для дампа ядра есть много причин. Я только что объяснил одну из возможностей дампа ядра. Обычно это происходит из-за SIGSEGV (ошибка сегментации) и SIGBUS (ошибка шины).
Файл дампа ядра содержит сведения о том, где произошло аварийное завершение, стек процесса, таблицу символов и т. Д.
Есть много инструментов для отладки coredump. gdb dbx objdump mdb
Параметры компилятора позволяют упростить процесс отладки. в то время как компиляция с указанием этих флагов (обычно -g) приведет к оставлению дополнительной информации в таблице символов объектных файлов, что помогает отладчикам (gdb / dbx) легко получить доступ к символам (символическим ссылкам).