получить доступ к стеку ядра процесса с заданным идентификатором процесса в отладке ядра

У меня есть Linux, работающий на VMWare, и я использую gdb на хост-компьютере для подключения к нему при отладке. Во время работы мое ядро ​​​​заставит некоторые процессы зависнуть, и я хотел бы исследовать это подробнее.

Ядро дает мне идентификатор процесса зависшего процесса вместе с трассировкой стека. Однако без передачи аргументов трассировка стека не очень полезна. Поэтому я хочу собрать больше информации. Итак, у меня есть два вопроса:

  1. Учитывая pid, как я могу получить, что task_struct соответствует процессу? Я пытался выполнить "p find_task_by_pid_ns(2533, &init_pid_ns)" под gdb, однако он зависает.

  2. Как только я получил task_struct и указатель стека. Моей конечной целью было бы воспроизвести трассировку стека (с аргументом каждой вызываемой функции). Есть ли инструмент для этого? Принимает ли gdb указатель стека и печатает для меня трассировку стека?

Спасибо.


person yangsuli    schedule 02.03.2012    source источник
comment
Но вам просто нужен стек вашего процесса (пользовательского пространства). Или вы отлаживаете модуль ядра или просто свое приложение???   -  person Basile Starynkevitch    schedule 02.03.2012
comment
Мне нужен стек ядра, так как я отлаживаю ядро   -  person yangsuli    schedule 02.03.2012


Ответы (1)


KDB будет полезен в этом случае. Я не знаю, какую версию ядра вы используете, но если вы используете ядро ​​в версии linux-2.6.35 или выше, вы можете переключиться на kdb из gdb с помощью следующей команды:

        maintenance packet 3

Когда вы находитесь в kdb, вы можете использовать команду ps, чтобы узнать адрес дескриптора процесса, и можете использовать команду bt для трассировки стека. Кроме того, вы можете запускать команды kdb из gdb с помощью команды gdb 'monitor'. Например, чтобы использовать команду kdb «ps», вы можете ввести следующую команду в gdb.

       (gdb) monitor ps

Вы можете получить список команд kdb, используя следующую команду.

       (gdb) monitor help

Зная дескриптор процесса, вы можете использовать следующую документацию для отслеживания стека любого процесса.

      http://www.emntech.com/documentation/debugging/kdb.pdf   
person mohanreddykv    schedule 11.05.2012