достъп до стека на ядрото на процес, даден идентификационен номер на процеса при отстраняване на грешки в ядрото

Имам 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'. Например, за да използвате командата 'ps' на kdb, можете да въведете следната команда във вашия gdb.

       (gdb) monitor ps

Можете да получите списъка с командата kdb, като използвате следната команда.

       (gdb) monitor help

След като знаете дескриптора на процеса, можете да използвате следната документация, за да проследите стека на всеки процес.

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