我目前正在使用 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()
在内核/调试/debug_core.c:1042
然后,我将跳过期望在不同线程中结束的代码(我对 Xorg 感兴趣),但是在我单步执行代码之后,下一个执行线程变得 cpu 空闲。
info thread
- 1 线程 4294967294 (shadowCPU0) cpu_idle_loop () at kernel/cpu/idle.c:116
如何将我的调试上下文切换到 Xorg 或任何其他线程,另外 irq_stack_union () 是什么意思。线程是空闲挂起的中断吗?