3

現在、KGDB を使用してカーネル コードをデバッグしています。割り込むたびに、自然に kgdb の割り込みハンドラにジャンプします。GDB の下で、次のコマンドを実行しました。

info threads 

出力は次のようになります

7 スレッド 7 (rcu_sched) 0x0000000000000000 in irq_stack_union ()

6 スレッド 5 (kworker/0:0H) 0x0000000000000000 in irq_stack_union ()

5 スレッド 3 (ksoftirqd/0) 0x0000000000000000 in irq_stack_union ()

4 スレッド 2 (kthreadd) 0x0000000000000000 in irq_stack_union ()

3 スレッド 1 (init) 0x0000000000000000 in irq_stack_union ()

2 スレッド 3754 (Xorg) 0x0000000000000000 in irq_stack_union ()

  • 1 スレッド 4294967294 (shadowCPU0) kgdb_breakpoint ()

    kernel/debug/debug_core.c:1042 で

次に、別のスレッドで終了することを期待してコードをジャンプします(Xorgに興味があります)が、コードをステップ実行した後、次の実行中のスレッドがCPUアイドルになります。

info thread
  • 1 スレッド 4294967294 (shadowCPU0) cpu_idle_loop () カーネル/cpu/idle.c:116 で

デバッグ コンテキストを Xorg または他のスレッドに切り替えるにはどうすればよいですか。さらに、irq_stack_union () の意味は何ですか。スレッドは保留中の割り込みでアイドル状態ですか?

4

1 に答える 1