Глава 16. Полезные функции

Предыдущая  Содержание  Следующая V*D*V

snd_printk() и друзья

ALSA обеспечивает версию функции printk(), печатающую подробную информацию. Если в конфигурации ядра установлен CONFIG_SND_VERBOSE_PRINTK, эта функция выводит заданное сообщение вместе с именем файла и строкой вызова. Также как в оригинальной printk() обрабатывается префикс KERN_XXX, поэтому рекомендуется добавлять этот префикс, например,

 

snd_printk(KERN_ERR "Oh my, sorry, it's extremely bad!\n");

 

Есть также варианты printk() для отладки. Для общих целей отладки может быть использована snd_printd(). Если  установлен CONFIG_SND_DEBUG, эта функция компилируется и работает как snd_printk(). Если ALSA собрана без флага отладки, она игнорируется.

 

snd_printdd() компилируется только тогда, когда установлен CONFIG_SND_DEBUG_VERBOSE. Обратите внимание, что CONFIG_SND_DEBUG_VERBOSE не установлен по умолчанию, даже если вы конфигурируете драйвер ALSA с опцией --with-debug=full. Вместо этого вы должны явно указать опцию --with-debug=detect.

snd_BUG()

Это показывает сообщение "BUG?" и трассировку стека, также как делает snd_BUG_ON. Он полезен, чтобы показать, что  здесь происходит фатальная ошибка.

 

Если флаг отладки не установлен, этот макрос игнорируется.

snd_BUG_ON()

Макрос snd_BUG_ON() аналогичен макросу WARN_ON(). Например,

 

snd_BUG_ON(!pointer);

 

или он может быть использован в качестве условия,

 

if (snd_BUG_ON(non_zero_is_bug))

    return -EINVAL;

 

Макрос принимает условное выражение для оценки. Когда установлен CONFIG_SND_DEBUG, выражение оценивается на самом деле. Если оно не равно нулю, он показывает предупреждающее сообщение, такое как BUG? (xxx), следующее обычно за трассировкой стека. Он возвращает оценённое значение. Если CONFIG_SND_DEBUG не установлен, этот макрос всегда возвращает ноль.

 

Предыдущая  Содержание  Следующая