核心調試中, 經常會有race, 友善的調試方法可以手動造一個環境出來模拟一下我們想要的時序, 來驗證想法.
*
比如說, a, b, 2個task, 想讓a跑到某行指令的時候, 暫停運作, 然後讓b運作來嘗試進入共有的臨界區,
一種最簡單的想法就是在a的代碼中加入sleep,
sleep其實會引發排程, 是以就改成while 1,
改成while 1, 其他task跑到這裡的時候也會生效,
是以加if條件語句,
這些方法公有的缺點都是需要改代碼, 重新編譯,
下面是一種不用改代碼的方法
比如現在task 9171停到了kswapd_try_to_sleep+281
然後把rip改成bogus_64_magic去
然後讓系統繼續跑
這樣task 9171就相當于在某條指令之後就不跑了, cpu占用100, 符合預期
就可以很友善的構造race環境來驗證問題