ブレークポイントコード

これを見てピンと来た人は何人いるだろうか。

 

ああ、x86系CPU環境でブレークポイントと同じ効果をもたらすアセンブラコードだなーと思った人。正解ですが本質的ではありません。

ああ、闇夜のc++とか言いながらついにネタ切れでc++の話以外を書き始めたなーと思った人。正解だし本質的です。

xcodeやVisual Studioで以下のコードを実行してみましょう。

int 3というアセンブラ命令はデバッガへのトラップ用の割り込みを発生させるので、5行目で勝手にデバッガがブレークします。

そこからステップトレースも、再実行も可能です。

マクロを作っておくと何かと便利です。

より汎用的に使うためにglibでは環境毎にマクロ定義を切り替えてます。

glibのgbacktrace.hを覗いてみましょう。

環境依存ついでに、より環境依存な話をしておくとmsvc向けに__debugbreak();という命令もあります。やってることはint 3と一緒なので覚える必要はないでしょう。

環境依存なので3DS向けゲームの開発しかしてない人には無用の知識です。

まとめ

  1. c++について書くことが思いつかなくなった
  2. __asm int 3;はブレークポイント発生コード
  3. マクロ化しておくと使い勝手がいい
  4. 汎用的な実装がglibで提供されている

 

Pocket