Что такое KGTP?
KGTP — это комплексный динамический трассировщик для анализа проблем ядра Linux и приложений (включая Android) в производственных системах в реальном времени.
Чтобы использовать его, не нужно патчить или пересобирать ядро Linux. Достаточно собрать модуль KGTP и установить его с помощью команды insmod.
Он предоставляет ядру Linux удалённый интерфейс отладки GDB. Затем GDB на текущем компьютере или удалённой машине может выполнять отладку и трассировку ядра Linux и пользовательских программ через точки трассировки GDB и некоторые другие функции без остановки ядра Linux. И даже если на плате нет GDB или интерфейса для удалённой отладки, можно выполнить отладку ядра Linux с использованием автономной отладки (см. /sys/kernel/debug/gtpframe и автономную отладку).
KGTP поддерживает архитектуры X86-32, X86-64, MIPS и ARM.
KGTP совместим с большинством версий ядра (от 2.6.18 до последних).
Видео, представляющее KGTP на английском языке, доступно по ссылке: http://www.youtube.com/watch?v=7nfGAbNsEZY или http://www.tudou.com/programs/view/fPu_koiKo38/.
Видео, представляющее KGTP на китайском языке, доступно по ссылке: http://www.infoq.com/cn/presentations/gdb-sharp-knife-kgtp-linux-kernel.
Более подробную информацию о KGTP на китайском языке можно найти здесь.
Как использовать KGTP?
См. исходный код ниже.
#kgtp.py автоматически настроит и запустит KGTP и GDB на текущей машине.
#При первом использовании этого скрипта придётся подождать некоторое время, так как необходимо загрузить некоторые пакеты.
wget https://raw.githubusercontent.com/teawater/kgtp/master/kgtp.py
sudo python kgtp.py
#Доступ к памяти ядра Linux.
(gdb) p jiffies_64
$2 = 5081634360
#Установка точки трассировки в функции vfs_read для сбора её обратной трассировки.
(gdb) trace vfs_read
Tracepoint 1 at 0xffffffff811b8c70: file fs/read_write.c, line 382.
(gdb) actions
Введите действия для точки трассировки 1, по одной строке.
Завершите строкой «end».
>collect $bt
>end
(gdb) tstart
(gdb) tstop
(gdb) tfind
Found trace frame 0, tracepoint 1
#0 vfs_read (file=file@entry=0xffff88022017b000,
buf=buf@entry=0x7fff0fdd80f0 <Address 0x7fff0fdd80f0 out of bounds>,
count=count@entry=16, pos=pos@entry=0xffff8800626aff50) at fs/read_write.c:382
382 {
(gdb) bt
#0 vfs_read (file=file@entry=0xffff88022017b000,
buf=buf@entry=0x7fff0fdd80f0 <Address 0x7fff0fdd80f0 out of bounds>,
count=count@entry=16, pos=pos@entry=0xffff8800626aff50) at fs/read_write.c:382
#1 0xffffffff811b9819 in SYSC_read (count=16,
buf=0x7fff0fdd80f0 <Address 0x7fff0fdd80f0 out of bounds>, fd=<optimized out>)
at fs/read_write.c:506
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )