現在、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 () の意味は何ですか。スレッドは保留中の割り込みでアイドル状態ですか?