MENU閉じる

HEXA BLOG

プログラム

HEXA BLOGプログラム2009.3.12

VisualStudioでのブレークポイント設定方法

こんばんは、平尾です。
昨日、健康診断の結果が来まして、若干数値が上がっているところがありました。
運動不足が数値として提示された以上、次回までにこのパラメータを調整しなければ!と思いました。
みなさんも悪いパラメータにならないようお気をつけください。

*


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

設定によっては操作方法が違うかもしれませんがご了承ください。
ブレークポイントをセットするにはソースを開き、
セットしたい位置で F9 です。
セットするとソースの左端にこんな赤い丸が表示されます。
この状態でプログラムを起動するとその場でプログラムを停止でき、各種変数の確認や書き換えなどができます。
ブレークポイントを削除するには、同じ行で F9 です。
ブレークポイントを一時的にOFFにするには Ctrl + F9 です。
ブレークポイントを全削除するには Shift + Ctrl + F9 です。
基本操作ですね。
止まった状態では黄色い矢印が表示されていると思います。
これをドラッグ&ドロップでつまんで移動させると、実行中の位置をずらすこともできます。
ずらした場合、途中のコードは実行されません。
実行位置だけ変更することになります。

位置情報複数回実行されたときにブレークするには

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

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

の4種類あります。
お好みのヒットカウント(何回ブレークポイントの位置に来たか)のタイプを設定し、上記のどれかを選びます。
ここで注意事項です。
ヒットカウントはデバッガが回数を数えてくれているので、for文のループカウンタ等とは全く別に測定しています。
なので以下のプログラムで pData->update(); の位置にヒットカウントが 10の倍数のときに止めるとした場合、

for( int i=0; i<16; ++i ) {
Data* pData = getData(i);
if( pData ) {
pData->update();
}
}

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つまでしかセットできませんので注意してください。
ちなみに自動変数をこの方法で止めようとすると、全然関係無いところでも止まってしまいます。
自動変数はスタック領域からとられるためです。

*


いかがでしたでしょうか。
デバッグ作業には欠かせないブレークポイント、しっかり自分のものにして使っていきましょう!
ここでは紹介していませんがトレースポイントなんていう機能もあったりします。奥深いですね。
興味のある方は調べてみてはいかがでしょうか。
それでは皆様、素敵なプログラムライフをわーい(嬉しい顔)

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE