Что такое файл дампа ядра в Linux? Какую информацию он предоставляет?

Что такое файл дампа ядра в Linux? Какую всю информацию он предоставляет?


person Jay    schedule 16.03.2011    source источник
comment
ссылка на файлы дампа информационного кода linux.die.net/man/5/core   -  person sush    schedule 16.03.2011
comment
Разве вы не можете прочитать en.wikipedia.org/wiki/Core_dump?   -  person Gabe    schedule 16.03.2011
comment
@Gabe - Может, и могут, но и что?.   -  person detly    schedule 16.03.2011
comment
@detly То, что что-то было опубликовано в MetaSO, не означает, что это правильно. На самом деле это очень неправильно по двум причинам: 1) Если бы SO был основным источником всех ответов на все вопросы программирования ‹s› ‹/s›, то вместо того, чтобы искать информацию в Google, можно было бы посмотрите их на SO. Спрашивать, а не смотреть вверх - гораздо более трудоемкий и менее эффективный способ получения информации. 2) SO не является не окончательным источником всей программной информации, никогда не будет этим источником, и вся идея о единственном источнике такой информации глупа.   -  person Jim Balter    schedule 16.03.2011
comment
Кроме того, SO - отличный способ ответить на конкретные вопросы, но Википедия - гораздо лучший механизм для общей информации, потому что она доступна для редактирования большим сообществом, работающим на основе консенсуса. В Википедии есть зрелые механизмы для представления информации, которых SO не может коснуться.   -  person Jim Balter    schedule 16.03.2011
comment
@detly: Вы видели blog.stackoverflow.com/2011/02/are-some -вопросы-слишком-простые? Опубликованная мною ссылка - первое, что приходит на ум при поиске дампа ядра; опубликованная ссылка на sushanth - это первый результат для linux core dunp.   -  person Gabe    schedule 16.03.2011
comment
@Jim Balter, @Gabe - честно говоря, я этого не видел и поправляюсь. Тем не менее, сравните ответ @paxdiablo - простой, последовательный, целевой и содержащий пример - с записью в Википедии: более половины раздела Использование ... носит чрезмерно общий характер или относится к архаичной технологии, он смешан с историей и форматированием, и есть в общей сложности три предложения, которые конкретно касаются фактического вопроса здесь (дампы ядра в Linux). Ответ здесь - лучшая отправная точка, чем любая из приведенных выше внешних ссылок.   -  person detly    schedule 16.03.2011
comment
@detly Также есть stackoverflow.com/questions/ 775872 / (среди прочих) - принятый ответ дает ссылку, которую дал @Gabe. По праву этот вопрос следовало закрыть как дублирующий.   -  person Jim Balter    schedule 16.03.2011
comment
@ Джим Балтер - конечно, я не хочу начинать (или продолжать) огненную войну. Я просто думаю, что то, что мы считаем каноническими источниками, на самом деле может быть плохим или бесполезным объяснением. (Я имею в виду, что это действительно плохо задаваемый вопрос, и на этом основании его тоже можно было закрыть.)   -  person detly    schedule 16.03.2011
comment
@detly Многое может быть, но это ни к чему. Ссылка на Википедию была предложена во многих SO-ответах о файлах ядра; если он ошибочен, не стесняйтесь его улучшать. Худшее, что можно сделать, - это заниматься трайбализмом, чем и занимается эта бессмыслица, исходящая от Джонатана Сэмпсона. Все, что, по его словам, больше нигде не происходит, происходит в Википедии. Каждый сайт имеет свою роль и свою ценность.   -  person Jim Balter    schedule 16.03.2011


Ответы (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(), затем возвращается для вывода области процесса.

person paxdiablo    schedule 16.03.2011
comment
Будет ли информация о глобальных переменных доступна в основном файле? - person Jay; 16.03.2011
comment
@Jay: Сами переменные будут там, поскольку они находятся в адресном пространстве. Информации о них (типа сопоставления названий местам) нет. Это что-то полученное из исполняемого файла при загрузке в отладчик (при условии, что исполняемый файл был скомпилирован с отладочной информацией). - person paxdiablo; 16.03.2011
comment
@Jay Значения локальных переменных также будут там, и как получить к ним доступ, станет известно отладчику через таблицу символов в исполняемом файле, если у исполняемого файла есть таблица символов отладки, например, созданная gcc -g. (Для других компиляторов проверьте их документацию.) - person Jim Balter; 16.03.2011
comment
для меня адресное пространство - это набор адресов. Я думаю, было бы правильнее сказать, что файл ядра - это дамп памяти процесса в момент сбоя. - person Ben; 16.03.2011
comment
@Ben, уточнено, чтобы указать адресное пространство в использовании. - person paxdiablo; 16.03.2011

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

В многопользовательской и многозадачной среде доступ к ресурсам, которые вам не принадлежат, неприемлем. Если процесс A пытается получить доступ к системным ресурсам, принадлежащим процессу B, это нарушение. В этот момент операционная система завершает процесс и сохраняет статус процесса в файл. И этот файл называется файлом дампа ядра. Для дампа ядра есть много причин. Я только что объяснил одну из возможностей дампа ядра. Обычно это происходит из-за SIGSEGV (ошибка сегментации) и SIGBUS (ошибка шины).

Файл дампа ядра содержит сведения о том, где произошло аварийное завершение, стек процесса, таблицу символов и т. Д.

Есть много инструментов для отладки coredump. gdb dbx objdump mdb

Параметры компилятора позволяют упростить процесс отладки. в то время как компиляция с указанием этих флагов (обычно -g) приведет к оставлению дополнительной информации в таблице символов объектных файлов, что помогает отладчикам (gdb / dbx) легко получить доступ к символам (символическим ссылкам).

person 7H3ju    schedule 09.04.2013