デバッガが嘘をつくとき:nRF54LのKMUでキャッシュの罠にはまる
When the Debugger Lies

Nordic SemiconductorのnRF54Lシリーズで、デバッガを使ってKMU(Key Management Unit)のレジスタを直接操作していた筆者。プッシュ操作は成功しているのに、GDBで読み出すと古い値が返ってくる現象に遭遇。AHB-AP経由で直接読むと正しい値が得られ、GDBとJLinkGDBServerの間のRSPパケットの違いが原因だと突き止める。デバッガを信用しすぎる危険性を、SoC内部のデバッグアーキテクチャから解き明かす。
デバッガが嘘をつくとき、それはキャッシュのせいかもしれない。
HNでの議論
19- Loren_SL
いい記事だね。WinDbgでも、ライブのWindowsターゲットで同じような古いキャッシュの罠があるよ。
- zavec
すごくクール!こういう細かい話を読むのが大好きなんだ。
- LoganDark
昔々、非void関数の最後に`return`文を書き忘れたせいで、C++コンパイラがなぜかRETを両方とも省略して、プログラムがそのまま不正命令に突入するという問題を解明しなければならなかったことがある。あれはデバッグが楽しかった(楽しくない、事実上プログラム全体をシングルステップ実行しなければならなかった)んだ。というのも、これが起きるたびにデバッガは一体何が起きているのかまったく混乱して、何も意味が通じなかったからね。