第8回 デバッガーの使用法


さて、今回はプログラムの解説ではなくBeIDEの使い方、第2弾です。
プログラムを打ち込んで実行したときにうまく行かないことが多々あります。
その時のチェックに役立つのが、BeIDEに付属しているデバッガーです。
1行ずつ実行し、その時の変数の値を逐次見ることが出来ます。
このデバッガー、最初は全部英語でとっつきにくい面もあるのですが、一度覚えてしまえばこれほど強力なツールもありません。
あと、この文章はIntel版を元にしているのでMacの方はごめんなさい。

さて、デバッガーを使うためには、現在のプロジェクトの設定を少々いじる必要があります。
まず、プロジェクトの画面のメニューの[Edit] - [Project Settings]から、
x86 Code Generatorを選ぶと以下のような画面になります。

x86 Code Generatrorの画面

ここに[Generate debugging information]という項目があるので、ここにチェックを入れます。
なお、ここにチェックを入れるとその下の最適化オプション(Optimizations)のレベルが、
自動的になし(None)になってしまいますので、今後デバッグ情報をオフにしたときに、
設定し直す必要がありますので気をつけてください。

あと、デバッグ情報に限ったことではないですが、プロジェクトの設定(Project Settings)をいじったときは
ソース全部をメイクし直す必要があります。

次に、[Project] - [Enable Debugger]をクリックしてください。

Enable Debuggerの画面

そうすると、同じメニューが次のように変化したと思います。

Disable Debuggerの画面

[Enable Debugger] が [Disable Debugger] に、[Run] が [Debug] に変化したと思います。
実は、[Generate debugging information]にチェックを入れなくとも、[Enable Debugger]をクリックすれば
勝手に、[Generate debugging information]にチェックが入るのですが、
[Disable Debugger] を押しても、チェックが外れるわけではないので注意してください。
ここら辺の話は、文章で読むより実際やってみたほうが分かりやすいと思います。

さて、前回のソースを例に、実際にデバッグ作業をやってみましょう。
まず、[Debug]をクリック(または Alt か Ctrl と R を同時に押す)すると以下のような画面になります。

デバッグの初期画面

最初は、日本語が化けてしまいますが、[Window] - [Settings]の所に[Font:]という項目があるので、
そこを日本語を含むフォントに変更してください。
基本的には[Haru]にしておけば問題ないと思います。

フォント画面

一番最初は、プログラムがまだ開始されていない状態です。
青い矢印が今実行されている部分を指しています。
ここから、プログラムを少しずつ実行するわけですが、そのためのコマンドには次の5種類があります。

デバッグメニュー
コマンド名ショットカットキー説明
RunAlt(Ctrl) + R普通に実行
StepAlt(Ctrl) + S一行実行(関数だったらその中に入る)
Step OverAlt(Ctrl) + T関数を飛び越して1行実行
Step OutAlt(Ctrl) + U現在実行している関数の終わりまで実行
KillAlt(Ctrl) + Kデバッグの終了

さて、一行ずつ実行する方法はわかりますが、特定の場所を調べるには、かなり不便です。
そのために、ウォッチポイントというものを指定できます。
ソースが表示されている左側に、小さく横線が引かれていると思いますが、
そこの左側をクリックすると、赤い×が表示されます。

今回は、チェックボックスを押したときに、メッセージがちゃんと期待通りに呼ばれているか、
MyVIew::MessageReceived()関数内にウォッチポイントを設定して、実行過程を見てみたいと思います。
まず、次の行にウォッチポイントを設定してみてください。
これで、MyView::MessageReceived()関数が呼ばれると、即座にデバッガの画面に戻るようになります。

ウォッチポイントの設定

さて、上の様にウォッチポイントを設定したら、Runで普通に実行してください。
そうしたら、チェックボックスとボタンを持ったウィンドウ(前回作ったもの)が出てきたと思うので
とりあえず、チェックボックスをクリックしてください。

そうしたら、青い矢印がウォッチポイントの所へ来て、デバッガのウィンドウが前面に出てきたと思います。 次の図は、MessageRecevied()関数が呼ばれてから少し進めた図です。

少し進めた図

ここで、右上の変数の表に注目してください。checkboxのアドレスをBMessage::FindPointer()で更新しているのですが、
その値が赤になって、更新されているのがわかります。
BMessage::FindPointerで、チェックボックスのアドレスを取得していると第7回に書きましたが、
それは、MyView.m_checkboxの値と同じになるはずであると説明しました。
デバッガで本当にそうなっているかどうか、検証してみようと思います。

ここの変数表でthisとは、現在実行されているオブジェクト(この場合はMyView)を示しているのですが、
その左側に、右向きの矢印がありますので、それをクリックしてください。
そうすると、thisに含まれるメンバ変数の値がすべて表示されます。

thisのメンバ変数の値

上の図を見てもわかる通り、m_checkboxとローカル変数checkboxのアドレス値は
0x8000ba28となっており、同じであることがわかります。
アドレス値は環境によってもちろん変わりますので、これを読んでいる方が実行されたときは
別の結果になっている可能性がありますが、m_checkboxとcheckboxは
同じ値が表示されているはずです。

今回はファイルがひとつだけだったのですが、ファイルが複数あるプロジェクトの場合、
main関数とは別の所にウォッチポイントを設定したいことがほとんどです。
ファイル選択の画面は、今まで説明してきたウィンドウとは別に、Teamウィンドウというものがあります。

Teamウィンドウの図

上の図は、私が現在作っているプログラムのものですが、ここのFilesという所で、
ファイルを選び、特定のソースファイルにウォッチポイントを設定することが出来ます。

最後に、変数表示機能で便利な機能をもう一つ紹介します。
いままで、調べてきたのはアドレス値だけでしたが、文字列や変数の値そのものを調べたい場合は、
変数の値をクリックしたあとに、[Data]をクリックしてください。

Dataメニューの図

ここで、表示する値の形式が選べます。
次の表に、その意味の一覧を示します。

Dataのメニュー説明
View Memoryそこのアドレスをバイナリ形式で別ウィンドウに表示
Default標準形式
Signed Decimal符号付き10進数形式
Unsigned符号なし10進数形式
HexDecimal16進数形式
Character文字形式
C String文字列形式
Enumarationenum型形式
View As別の型と見なして表示
View As Array配列形式

このようにいろいろな形式が選べるので、試してみてください。

今回のデバッガの使い方はいかがでしたでしょうか?
デバッガの使い方がわかると、プログラムのデバッグのしやすさが格段に違うので是非試してみてください。

[<<前へ] [次へ>>] [戻る]

big56 big56@anet.ne.jp

【運営会社「パラダイムシフト」サービス】

無料ホームページ   携帯ホームページ   無料ホームページ作成   レンタルサーバー   ブログ   ホテル   アンドロイド   旅行 口コミ   旅行情報   国際電話   ホテル比較