下記のようにコンパイラの最適化で省略される個所にブレイクポイントを設定できないことがあります。
1 2 3 4 5 6 7 8 |
while (num_of_line > 0) { /* 中略 */ if (num_of_lines < 10) { continue; /* ここにブレイクポイントを設定できない */ } } |
解決方法
1 2 3 4 5 6 7 8 9 |
while (num_of_line > 0) { /* 中略 */ if (num_of_lines < 10) { asm volatile ("NOP"); /* ここ(NOPコマンド)にブレイクポイントを設定できる */ continue; } } |
上記のようにインライン・アセンブラでNOP(Non-Operation)コマンドを挿入することで強制的にブレイクポイントを設定できるコードを挿入します。
上記はGCCの例ですが、多くのコンパイラでインライン・アセンブラの書式が用意されているので、同じようなテクニックが利用できます。