[gcc] ブレイクできないところにブレイクポイントを作る

下記のようにコンパイラの最適化で省略される個所にブレイクポイントを設定できないことがあります。

解決方法

上記のようにインライン・アセンブラでNOP(Non-Operation)コマンドを挿入することで強制的にブレイクポイントを設定できるコードを挿入します。

上記は GCCIAR EmbeddedWorkbench の例ですが、多くのコンパイラでインライン・アセンブラの書式が用意されています。 volatile修飾子をつけないとコンパイラの最適化が働き、NOP が削除される場合があります。