使用NDB调试Linux内核的线程切换过程
cpu_switch_to
因为要调试Linux内核的线程切换过程,所以需要在`cpu_switch_to`处设置断点。
注意:ARM无法设置软件断点,只能设置硬件断点,下面bp设置的软件断点是“自动翻译”成硬件断点的。
bp lk!cpu_switch_to
bl
0 e ffffff80`08085d4c 0001 (0001) lk!cpu_switch_to
设置完断点后,g起来,等待断点命中;不需要担心无法命中,因为线程切换一个非常频繁的动作。
从栈回溯内可以看到CPU原本是处于空闲状态,发现有操作后,就会跑去执行相应的动作,这个时候就是切线程的动作。
调用__schedule是为了避免冲突,避免这个CPU有事情做,忙不过来.
k
Child-SP RetAddr Call Site
ffffff80`0a323e70 ffffff80`090a060c lk!cpu_switch_to [arch/arm64/kernel/entry.S @ 1067]
ffffff80`0a323e70 ffffff80`090a104c lk!__schedule+0x2f4 [kernel/sched/core.c @ 3437]
ffffff80`0a323e70 ffffff80`080f4f50 lk!schedule_idle+0x24 [./include/asm-generic/bitops/non-atomic.h @ 106]
ffffff80`