プログラムTIPS

DEMO PROGRAM ヘキサドライブでは様々な研究開発をしています。その一部を紹介。

VisualStudio:ブレークポイントの使い方(2009年3月12日)

今回はVisualStudioでのブレークポイントの使い方を解説していきます。
デバッグには必須ですが、意外と知らない人もいるのではないでしょうか。
◆ブレークポイントの設定方法

 

設定によっては操作方法が違うかもしれませんがご了承ください。
ブレークポイントをセットするにはソースを開き、
セットしたい位置で F9 です。
セットするとソースの左端にこんな赤い丸が表示されます。
この状態でプログラムを起動するとその場でプログラムを停止でき、
各種変数の確認や書き換えなどができます。

ブレークポイントを削除するには、同じ行で F9 です。
ブレークポイントを一時的にOFFにするには Ctrl + F9 です。
ブレークポイントを全削除するには Shift + Ctrl + F9 です。

基本操作ですね。
止まった状態では黄色い矢印が表示されていると思います。
これをドラッグ&ドロップでつまんで移動させると、実行中の位置をずらすこともできます。
ずらした場合、途中のコードは実行されません。
実行位置だけ変更することになります。

◆複数回実行されたときにブレークするには

ブレークポイントに何回か来たときだけ止めたいことがあると思います。
そんなときはを右クリックし、ヒットカウントを選びます。
選び方には

・常に中断
・ヒットカウント数が次の数と等しいときに中断
・ヒットカウントが次の数の倍数になったときに中断
・ヒットカウントが次の数以上になったときに中断

の4種類あります。
お好みのヒットカウント(何回ブレークポイントの位置に来たか)のタイプを設定し、上記のどれかを選びます。

ここで注意事項です。
ヒットカウントはデバッガが回数を数えてくれているので、for文のループカウンタ等とは全く別に測定しています。
なので以下のプログラムで pData->update(); の位置にヒットカウントが 10の倍数のときに止めるとした場合、

for( int i=0; iupdate();
}
}

1回目は i=9
2回目は i=3
3回目は i=13
4回目は i=7
5回目は i=1

といった状態で止まってしまいます。ご注意ください。
i == 10 の時に止めたい場合は次の方法↓を使います。

◆条件を指定してブレークするには

上記の i==10 のときに止めたい場合、ブレーク条件を指定すれば止めることができます。
●を右クリックし、条件を選びます。
条件には
i == 10
を入力し、”true の場合”にチェックを入れます。
これで毎回 i == 10 のときに止まります。

前回来たときと比べて i が変わっていた場合にのみ止めたいという時もあります。
そんな時は”変更された場合”のチェックに入れ、条件に
i
とだけ入れれば、変更されていた場合にだけ止まってくれます。
ただしブレークポイントを設定した行での値チェックになりますので、
書き換わった瞬間をとらえることはできません。
書き換わった瞬間をとらえたいというときには次の方法↓を使います。

◆書き換わった瞬間ブレークするには

まずは変数に正しい値が入っているときにブレークポイントで止めます。
続いてメニューの「デバッグ」→「ブレークポイントの作成」→「新しいデータブレークポイント」
を選びます。
出てきたダイアログにアドレスに変数のアドレスを入力します。

例えばグローバルな変数 int counter; があったとしましょう。
この counter が書き換わった瞬間をとらえたいときには、アドレスの欄に
&counter
と書きます。

バイト数には変数のサイズを入力します。
サイズの上限ですが、ハードウェア的に4バイトまでしか対応できないようです。

アドレスだけ分かっているという特殊な場合は、アドレスの欄に直接アドレスを書きます。
例えば
0x014a5320
といったふうに入力します。(値は適当です)

この方法はブレーク箇所を設定しないため、書き換わった瞬間を止めることが出来ます。
なのでメモリ破壊を発見する際に大活躍します。
是非覚えておきましょう!
ただし、1つのプロジェクトにつき 4つまでしかセットできませんので注意してください。

また、自動変数をこの方法で止めようとすると、全然関係無いところで止まってしまいます。
自動変数はスタック領域からとられるためです。
これも要注意です!

いかがでしたでしょうか。
デバッグ作業には欠かせないブレークポイント、しっかり自分のものにして使っていきましょう!
ここでは紹介していませんがトレースポイントなんていう機能もあったりします。奥深いですね。
興味のある方は調べてみてはいかがでしょうか。

【免責事項】

本サイトが提供している情報に関しては、安全性等、いかなる保証もされません。 株式会社ヘキサドライブは、これらの情報をあなたが利用することによって生ずるいかなる損害に対しても一切責任を負いません。

【著作権】

本サイトが提供しているコンテンツについては、特に断りのある場合を除き、株式会社ヘキサドライブが著作権を有します。