При отладке ядра Linux мы можем использовать несколько инструментов, например, отладчики (KDB, KGDB), дамп при сбое (LKCD), инструментарий трассировки (LTT, LTTV, LTTng), пользовательские инструменты ядра (dprobes, kprobes). В следующем разделе я попытался обобщить большинство из них, надеюсь, они помогут.
LKCD (Linux Kernel Crash Dump) позволяет системе Linux записывать содержимое своей памяти при возникновении сбоя. Эти журналы могут быть дополнительно проанализированы на предмет первопричины сбоя. Ресурсы, касающиеся LKCD
Упс когда ядро обнаруживает проблему, оно печатает сообщение Упс. Такое сообщение генерируется операторами printk в обработчике ошибок (arch / * / kernel / traps.c). Выделенный кольцевой буфер в ядре, используемый операторами printk. Oops содержит такую информацию, как процессор, на котором произошли Oops, содержимое регистров CPU, количество Oops, описание, трассировка стека и другие. Ресурсы, касающиеся ядра Упс
Dynamic Probes - это один из популярных инструментов отладки для Linux, разработанный IBM. Этот инструмент позволяет разместить «зонд» практически в любом месте системы, как в пространстве пользователя, так и в пространстве ядра. Зонд состоит из некоторого кода (написанного на специализированном, ориентированном на стек языке), который выполняется, когда управление достигает заданной точки. Ресурсы, касающиеся Dynamic Probe, перечислены ниже
Linux Trace Toolkit - это патч для ядра и набор связанных утилит, которые позволяют отслеживать события в ядре. Трассировка включает в себя информацию о времени и может создать достаточно полную картину того, что произошло за определенный период времени. Ресурсы LTT, LTT Viewer и LTT Next Generation
MEMWATCH - это инструмент обнаружения ошибок памяти с открытым исходным кодом. Он работает, определяя MEMWATCH в инструкции gcc и добавляя заголовочный файл в наш код. Благодаря этому мы можем отслеживать утечки памяти и повреждения памяти. Ресурсы, касающиеся MEMWATCH
ftrace - хороший фреймворк трассировки для ядра Linux. ftrace отслеживает внутренние операции ядра. Этот инструмент включен в ядро Linux в 2.6.27. С помощью различных подключаемых модулей трассировки ftrace может быть нацелена на различные статические точки трассировки, такие как события планирования, прерывания, отображаемый в памяти ввод-вывод, переходы состояния питания ЦП и операции, связанные с файловыми системами и виртуализацией. Кроме того, доступно динамическое отслеживание вызовов функций ядра, опционально ограниченное подмножеством функций с помощью глобусов, и с возможностью генерировать графики вызовов и обеспечивать использование стека. Вы можете найти хороший учебник по ftrace на https://events.linuxfoundation.org/slides/2010/linuxcon_japan/linuxcon_jp2010_rostedt.pdf
ltrace - это утилита отладки в Linux, используемая для отображения вызовов, выполняемых приложением пользовательского пространства, к разделяемым библиотекам. Этот инструмент может использоваться для отслеживания любого вызова функции динамической библиотеки. Он перехватывает и записывает динамические библиотечные вызовы, которые вызываются исполняемым процессом, и сигналы, которые получает этот процесс. Он также может перехватывать и распечатывать системные вызовы, выполняемые программой.
KDB - встроенный в ядро отладчик ядра Linux.KDB следует упрощенному интерфейсу в стиле оболочки.Мы можем использовать его для проверки памяти, регистров, списков процессов, dmesg и даже для установки точек останова для остановки в определенном месте.С помощью KDB мы можем устанавливать точки останова и выполнять некоторые основные функции управления ядром ( Хотя KDB не является отладчиком исходного уровня ).Несколько полезных ресурсов, касающихся KDB
KGDB предназначен для использования в качестве отладчика исходного уровня для ядра Linux.Он используется вместе с gdb для отладки ядра Linux.Для использования kgdb требуются две машины.Одна из этих машин является машиной разработки, а другая - целевой машиной.Отлаживаемое ядро работает на целевой машине.Ожидается, что GDB можно будет использовать для «взлома» ядра, чтобы проверить память, переменные и просмотреть информацию стека вызовов, аналогично тому, как разработчик приложения будет использовать GDB для отладки приложения.Можно разместить точки останова в коде ядра и выполнить некоторые ограниченные шаги выполнения.Несколько полезных ресурсов, касающихся KGDB