こんにちは､ おかえりなさい｡
この講義では､ デバッガーをどのように使うかのデモを行いたいと思います｡
そこで､ グラフィカル・ユーザー・インターフェースを使って､ デバッグ・モードでプログラムを起動する方法､
ブレークポイントを設定する方法､ コールスタックを見る方法､ ウォッチ・ウィンドウを使ってさまざまな変数を表示する方法を紹介したいと思います｡
平均値を決めているだけの簡単なプログラムです｡
これをデモに使うんです｡
3つの整数を読み込んで保存し､ その平均値を計算するだけです｡
さて､ 実際にデバッガーを使う前に一つ言っておきたいことがあるのですが､ 設定が正しく行われていることを確認する必要があります｡
そして､ これは以前のビデオでお話ししたのですが､ 基本的にデバッガーを使うためのコードライトの設定をします｡
ただ､ 記憶を呼び覚ますために､ ここでプロジェクトを選択し､ 右クリックして「設定」に進みます｡
また､ お使いのプラットフォームによっては､ 左側のデバッガ設定にGDBへの正しいパスが設定されていることを確認してください｡
Windowsの場合､ CygwinのGDB Xを使うか､ MinGWのw64を使うか､ いずれにせよ､ うまくいっていることが前提です｡
UnixやLinuxであれば､ このパスは必ずしも設定する必要はない｡
もうひとつ重要なのは､ コンパイラのオプションで､ デバッグ用にコンパイルしていることを確認し､
最適化のためにDash G dwarfがdash oになるようにすることです｡
Windowsでは､ 実行ファイルと一緒にデバッグ情報を取得するために､ これらを設定する必要があります｡
また､ デバッグモード用にビルドしていることを確認する必要があります｡
だから､ debugが選択されていて､ releaseが選択されていないことを確認する必要があるんだ｡
それらがすべて正しく設定されれば､ デバッガーやコードライトは使えるようになるはずです｡
もし問題があるようでしたら､ お使いのプラットフォームで設定するためのビデオにお戻りください｡
デバッガーとコードライト｡
デバッガに関する最も重要な概念は､ ブレークポイントという考え方です｡
ブレークポイントとは､ プログラムの中でコードの実行を停止させるために設定するものです｡
デバッガを実行すると､ その行でプログラムが停止します｡
このため､ 変数や変数の値を見ることができます｡
これにより､ コードを1行ずつ見ていき､ 問題があれば診断して修正することができます｡
通常､ プログラムを実行するとき､ デバッガで実行しようとしても､ ブレークポイントが設定されていなければ､
何も起こりません｡
ですから､ 通常は､ 他のプロジェクトと同じように､ 「プロジェクトを構築する」､ 「プロジェクトを構築する」､
「プロジェクトを構築する」というように､ プロジェクトを構築することができます｡
ビルドしてデバッグモードで実行する場合､ デバッガーメニューオプションに上がって､ スタート､
デバッガーを続行する必要があるんだ｡
そして､ それを再度実行すると､ ブレークポイントが設定されていれば､ そのブレークポイントにヒットします｡
ブレークポイントを設定していない場合は､ そのまま実行されます｡
そこで､ このプログラムをデバッグモードで実行しようとすると､ 数字のところで止まっているので､ ただ出てきてエンターを要求され､
いくつかの数字を打ち込むとそのまま終了してしまいます｡
実際にプリントアウトするわけでもないんですよね？
ですから､ デバッガを使うなら､ 少なくとも1つのブレークポイントを設定しておくことが非常に重要です｡
ブレークポイントを設定する最も簡単な方法は､ ブレークポイントを設定したい行番号の余白の内側をクリックするだけです｡
そしてまた､ ブレークポイントはその行番号で実行を停止することになります｡
そこで､ 10行目のprintf関数のすぐそばにブレークポイントを設定し､ ダブルクリックすると､ 赤い丸が配置されるのがわかると思います｡
これはデバッガに､ おい､ 10行目で止めろ､ と言っているのです｡
デバッガーを起動する方法は､ デバッガーにアクセスし､ 「スタート」「コンティニュー」と言うだけでいいんですね｡
それ以外はグレーアウトしているようなものですよね？
では､ そのブレークポイントを打つためにデバッガを起動してみましょう｡
では､ デバッガーを続行するために､ ビルドとデバッグを言いましょう｡ すると､ プログラムが10行目で止まっていることに気づきます｡
緑色の矢印が表示され､ デバッガーペインが表示されているのがわかりますね｡
デバッガーペインには､ 見ることができる情報のためのさまざまなタブがあります｡
また､ デバッガーでGDBウィンドウにアクセスすると､ チェックされているものをすべて見ることができます｡
デバッガーのウィンドウはたくさんありますから､ それを見てください｡
だから､ ローカルは通常､ あなたの地域の変数時計に関係している｡
変数にウォッチをつけて､ 変数が変化したらポップアップするようにすることができます｡
Outputは､ デバッグのオプションや出力スレッドを使い分けるためのものです｡
実際にプログラムを動かしているスレッドを見ることができます｡
より高度なコンセプトのCallstackが注目されています｡
基本的にはコールスタックとローカルを見ます｡
この2つはデバッグに役立つ最も重要なもので､ 次にメモリ､ そしてブレークポイントもあります｡
ブレイクポイントがどこに設定されているかがわかります｡
だから､ いろいろな選択肢があるんです｡
現在､ 10行目で止まっています｡
コールスタックを見ることができる｡
コールスタックを見ると､ main関数が呼び出されていることがわかります｡
localsを見ると､ 3つの変数zero oneとzeroが表示されています｡
ゼロワン､ ゼロと初期化されているものには､ 実際には何も入力していない｡
時計は､ あなたが実際に追加することができます｡
プラス記号を押して追加すると､ 特定の変数の時計を追加することができます｡
それから､ デバッグモードで実行すると､ デバッガーのツールバーが表示されますよね？
再生ボタンはそのまま継続します｡
だから行くのでしょう｡
再生ボタンを押しても､ そのままプログラムが終了してしまいますよね？
走り出すだけです｡
実際にプログラムが入力を求めてきます｡
だから､ 再生を押した｡
コンソールアプリケーションに戻ると､ Enterと表示されます｡
だから､ プログラムランで自分の3つの数字を叩き出したんだ｡
そうすると､ やはりプリント機能は見当たりませんでしたね｡
ウィンドウが消えてしまったんです｡
そこで再びデバッグモードで実行すると､ 再びブレークポイントに到達し､ デバッガーペインが表示され､ 10行目が停止します｡
ツールバーは重要です｡ このツールバーを使って､ コードを実際に操作することができますし､
デバッガーに上がって､ ここにあるすべてのオプションを見ることもできます｡
だから､ ステップインステップインストラクションネクスト､ ネクストインストラクション､ ステップアウト､ ステップインは関数の中に入るということができるのです｡
その行で関数が呼び出されている場合､ ステップ・イン・インストラクションはアセンブリ言語のようなものになります｡
次に､ その行を飛び越えることにします｡
そして､ ネックインストラクションも同じようなものです｡
ステップアウト､ すでに関数に参加している場合に､ 関数から飛び出してキャロットラインにジャンプしようとする｡
実はカーソルに行くと思うんです｡
ラン・トゥ・キャロット・ラインも同様です｡
ブレークポイントのオン・オフや無効化など､ いろいろなことができるので､ メニューからアクセスできるようになっています｡
あるいはまた､ ツールバー｡
普段は､ ツールバーがすでに立ち上がっているので､ それを使っています｡
そして､ また違うウィンドウを見ると､ ローカルのコールスタックとブレークポイントがあります｡
本当に大切なものたち｡
これは､ 10行目にブレークポイントがあると言うことです｡
それから､ 1つはカーソルを言うだけだと思うんです｡
さて､ ここで10行目のprint F enterで止まってしまいました｡
次の命令に行くことができ､ これは11行目のスキャンに行くことができます｡
Fは実は入力を求めるブロック関数なのです｡
だから､ ここで次に進もうとすると､ 実はちょっと止まってしまうんです｡
実際には何度もnextを押す必要があるかもしれません｡
プログラムが入力を求めているときに､ 私が普段していることは､ すでにブロックされている､ 止まっている､ 次に行ってほしいということです｡
その次の行にブレークポイントを置いて､ 再生ボタンを押す｡
だから今､ 再生ボタンを押しても､ 入力待ちで何も起きない｡
プログラムではEnterと書かれています｡
そこで､ 5､ 6､ 7と入力し､ エンターボタンを押すと､ ブレークポイントにヒットするのです｡
これで印刷ボタンが表示され､ 実際に印刷機能に飛び込むことができるようになったわけです｡
そして､ 実は最初に平均関数に飛びます｡
つまり､ step intoと言えば､ 平均関数に行くことがわかります｡
そして､ 変数を見ると､ 変数が変化しているのがわかると思います｡
だから､ 次に行くなら27の次の行､ 次に28の次の行と､ 打ち続けるんです｡
次に､ 実際に飛び出してみて､ 実は機能の最後のほうにいるんですね｡
それで､ 再生ボタンを押すと､ 今､ プログラムが完了し､ ウィンドウが消えたことが確認できます｡
しかし､ 自分の変数を見ることもできるし､ 他のものを見ることもできる｡
それでまた､ このプリント機能の中にブレークポイントを入れることもできるんです｡
そして､ それに走ると､ 平均値の代わりにprint関数が実行を停止することが改めて確認できます｡
そして､ 実際に何が起こっているのか､ ステップオーバーしてアプリケーションに移動すると､
情報がプリントアウトされているのがわかりますね｡
そうでしょう？
続けて､ 最後まで実行すると､ return文が出て､ プログラムが終了します｡
ですから､ プログラムの出力を見たい場合は､ そのリターンの前にブレークポイントを置き､
続行する必要がないようにすることが重要です｡
この赤い四角を押すとデバッガが停止し､ 2本の平行棒を押すとデバッガが一時停止し､ このオプションとコールスタックでデバッガを再起動することができます｡
ここでも､ 関数の中に入ってデバッガーを実行するとわかりやすいので､ もう一度デバッガーを実行してみます｡
デバッガーと言い､ スタートと言い､ コンティニューと言い｡
そして､ 関数内の情報を入力した後にブレークポイントを押すと､ カースタックには先ほど示したようにmainとprintが表示されていることがわかります｡
最後に呼び出された関数を見ることができますが､ 多くの関数などを持つプログラムでは､ コールスタックはこれよりもずっと大きくなります｡
あとは､ ブレークポイントだけが重要かもしれません｡
どのようなブレークポイントを設定したかを確認したい場合は､ すべてのブレークポイントと､ それが配置されているプログラム全体が表示されます｡
しかし､ 基本的なデバッグ技術やプログラムでは解決できない問題に対して､ これを弄り､
慣れ､ 快適さを得て､ かなりの頻度で使用する必要があります｡
クラッシュは一行一行で行く｡
そして､ 一行ずつ進んでいくと､ 実際にプログラムがクラッシュして終了するのがわかり､ それがどの行で起こったのかがわかるようになります｡
今回も小さなプログラムですが､ デバッグの仕組みの基本的な理解は得られるはずです｡
改めて､ 参考になったでしょうか｡
このようなことを学ぶには､ 実際に遊んでみて､ 使い始めるのが一番です｡
前回のチャレンジで取り組んだプログラムの一つを持ち出してみてください｡
ブレイクポイントを追加する､ とても簡単です｡
物の内側を右クリックするだけで､ ブレークポイントを追加することができます｡
デバッグモードで起動し､ 1行ずつステップを踏んで､ 変数がどのように変化し､ コールスタックがどのように増えていくかを確認することができます｡
より大きな機能を持つ場合｡
ありがとうございます｡