Главная » Ядро Linux » Генерация ошибок и выдача информации

0

Существует несколько  подпрограмм  ядра,  которые позволяют легко  сигнализировать о  наличии дефектов кода, обеспечивать объявления об  ошибках и выводить необходимую информацию.  Две наиболее часто используемые — это BUG()  и BUG_ON(). При вызове эти функции создают ситуацию oops, которая проявляется в  выводе обратной трассировки стека ядра и сообщения об  ошибке. Каким образом эти вызовы генерируют ситуацию oops зависит от  аппаратной платформы. Для большинства аппаратных платформ вызовы BUG()  и BUG_ON()   определяются как некоторая недопустимая машинная команда, которая приводит к выводу желаемого сообщения oops.

Обычно эти вызовы используются в  качестве объявления  о  наличие ошибки

(assertion), чтобы сигнализировать о  ситуации, которая не должна произойти.

if (bad_thing) BUG();

Или даже так.

BUG_ON(bad_thing);

О  более критичной ошибке можно сигнализировать с помощью функции pani c (). Функция pani c ()  печатает сообщение об  ошибке и останавливает ядро. Ясно, что эту  функцию  следует использовать только в  самой плохой ситуации.

if (terrible_thing)

panic("foo is %ld!\n", foo);

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

if (!debug_check) {

printk(KERN_DEBUG "выдать некоторую информацию …\n");

dump_stack();

}

Источник: Лав,  Роберт. Разработка ядра  Linux, 2-е  издание. : Пер.  с англ.  — М.  : ООО  «И.Д.  Вильяме» 2006. — 448 с. : ил. — Парал. тит. англ.

По теме:

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