Xcodeデバッガに関するメモ

 

デバッガとは?

・デバッガはプログラム内のバグ(ミスや欠陥)を調査、改善するための手段のひとつです。
・これは、プログラマが決めたタイミングで、プログラムの実行を、途中で一時停止できるツールです。
・このとき、ビデオやDVDレコーダのコマ送りのように、プログラムの進行を行単位でゆっくり追跡することもできます。
・止めた時点での使用中の全変数がリストされるので、変数の値を出力せずに調べる事ができます

バグの発生箇所を絞り込むために、どの段階で間違った値に変化したのか調べることができます。
リストされた変数の内容は、強制的に書き換えることもできます。


最初は小さなプログラムを作った段階でデバッガで慣れると良いかもしれない。
メイン関数の他に、関数を2,3個つくって、それらを入れ子で呼び出したり、ローカル変数やポインタなどを使ったりしたコードをかいて、変数に何が入っているのかを確認する等。
(関数を使うのは、ステップイン、ステップアウトの挙動を知るためです)

どうやって使う?

手順
コードを書いて、ビルド時のエラーがなくなるまで仕上げる。

一時停止させたいタイミングを設定するための「ブレークポイント」を、
ソースコード中の任意の場所に作る(いくつでも可)


Xcodeのメニューバーから、デバッグ>デバッガ を選びデバッガを起動。

「ビルドとデバッグ」または「デバッグ」ボタンをクリックして実行。

プログラムはデバッグモードで起動し
「ブレークポイント」に相当するタイミングで一時停止する。

Thread リストに関数が一覧ででてくるので好きなのを選択
Allegroなら _mangled_main を選択すればメイン関数で使われている変数の内容(アドレスなど)が見れる
foo を選択すれば、fooという関数で使われた変数一覧を見れる
この時、該当箇所がソース表示されます

デバッガの「ステップイン」機能を使いコマ送りでプログラムを進め、変数一覧の値の変化を観察します。
デバッガの「続ける」ボタンを使えば、再び通常の速さでプログラムは進行します(→ブレークポイントがあれば、また一時停止します)
プログラムが終了するまで、続きます。

Thread 項目の見分け方、ソース表示とアセンブラ表示

Threadリストに、自作の関数以外の見慣れない名前の項目が表示されることがあります。 これらの内容↓は、アセンブラ表示といって、人が見てもさっぱり分からないので無視してください。 次に挙げるものがそうです

  call_user_main
  +[AllegroAppDelegate app_main:]
0x92be709c +0072 addis r5,r31,4094
0x92be7070 +0028 bl 0x92bc2c90 _NSCurrentThread
これは、プログラムから呼び出しているライブラリ(コンパイル済み)を覗いてしまった状態です。 例えば、Allegroライブラリを組み込んでる場合はその関数を通ったときにAllegro本体のアセンブラ部分が表示されています。

(Windowsでは VC++ の混合モード でも同じような現象に遭遇するそうです。)

デバッガの使い方、コマ送り編

デバッグ中のプログラムがブレークポイントで停止したら、一行ずつゆっくりプログラムを進める事もできます。 デバッガには、それらを操作する機能があります。 これらはWindowsやフリーの統合開発環境でも同じ使い方をします。
普通は「ステップイン」のみ使えば事足ります。これは関数内にも潜り一行一行進んでいきます。 でも自作の関数内を精査する必要がなければ、「ステップオーバー」で関数で一気に飛び越えることもできます。 標準ライブラリやコンパイル済みのライブラリの関数を「ステップオーバー」で回避することもできるそうです。

「ステップアアウト」は関数内の最後まで自動的に進んでからその関数を脱出します。
ステップ・イン・インストラクション は、よくわかりません。

参考文献:

Last modified 2008.2.22

Tsukubado