7

xcodeで最適にデバッグする方法を知りたいです。ブレークポイントを設定する方法は知っていますが、理想的には、シミュレーターを停止してからコードをステップ実行したいと思います...

ブレークポイントをステップスルーするのではなく、コードを1行ずつステップスルーして、コードがどこに移動するか、どのメソッドが実行されるかなどを確認できるようにします。

これは可能ですか?もしそうなら、どのように?

4

2 に答える 2

23

Xcodeのデバッグ制御アイコン

Xcode 4のコードウィンドウの左下に、デバッグステップコントロールが表示されます。それぞれに、それを説明する短い代替テキストがあります。ここでもう少し詳しく説明します。エキスパートデバッガーになることを学ぶことは、多くの教科書の主題です。

再生ボタンの代替テキスト:プログラムの実行を続行します。あなたはおそらくこれをすでに見つけているでしょう。それを押すと、次のブレークポイントに進みます。

ジャンプ矢印の代替テキスト:ステップオーバー。このボタンを繰り返し押すと、プログラムと同じように、現在のスコープレベルでプログラムを進めることができます。それはあなたが現在の方法を通して段階的にあなたのプログラムの振る舞いを観察することを可能にするでしょう。現在のメソッドが終了すると、ステップオーバーにより、プログラムスタックの1つ上の呼び出しメソッドに移動します。

下矢印の代替テキスト:ステップインします。このボタンを押すと、スコープ内の新しいメソッドに従い、デバッグ用にコンパイルされている場合は、呼び出されたメソッドのコードを表示できます。たとえば、上記のデバッグウィンドウで現在のコード行をクリックすると、_generateSourcesメソッドが表示され、ステップオーバーに進むことができます。

上矢印の代替テキスト:ステップアウト。現在のコンテキストから抜け出し、プログラムスタックの1つ上の呼び出しメソッドに移動します。これは、ステップオーバーを使用してメソッドを終了し、プログラムを通常どおりに実行し、ステップオーバーを使用してデバッグしなかった元のスコープのすべてのコード行を実行するのと同じように動作します。

コールスタックの表示

背景が青色のシルエットをクリックすると、現在のコールスタックが表示されます。コールスタックは常に、現在のスコープからプログラムを起動するために呼び出された最初のメソッドまでずっと進行します。ここに表示されている各メソッドは、-[HelloWorldLayerinit]に到達するために順番に呼び出されました。ステップアウトを押すと、実行中のコードの現在の行が-[CCNodeノード]に戻り、そのソースがある場合はそれを参照できます。

左側には、現在実行されているコード行のスコープから見える現在のローカル変数があります(この画像の76行目)。これらの変数は、ステップオーバーのような上記のコマンドを実際に使用する方法です。 backgroundwinSizeは、このスコープで定義され、現在使用されているローカル変数です。スコープが終了すると、スコープはなくなります。 _cmdは、Objective-Cで現在呼び出されているセレクターへのポインターです:-[HelloWorldLayerinit]。高度なデバッガーになるまで、これは必要ありません。 selfは、現在実行中のクラス、HelloWorldLayer、およびobjc_superに属するすべてのivarを含むオブジェクトへのポインターです。HelloWorldLayerの親クラスへのポインタです。

于 2012-10-02T20:18:25.283 に答える
8

@Thomson Corner の回答にキーボード ショートカットを追加します。

  • 続行するには「c」を使用します。「s」でステップ、「n」で次、「f」で終了。デバッガーをマウスで操作するのは好きではありません。これらのアイコンは小さすぎて、ポインターを合わせるのが面倒です (たまに)。私はいつもキーボード派で、キーボードは本当に快適です。

  • また、 poを使用してみてください。変数の値を入力候補とともに出力します。po _varName のように。変数が nil 値かどうかなどを簡単に確認できます。

  • を変更して、コマンド エイリアスを変更することもできます~/.lldbinit

公式のチュートリアルは次のとおりです: http://lldb.llvm.org/tutorial.html。そして別のチュートリアル: http://www.informit.com/articles/article.aspx?p=1829415&seqNum=6 . 上で指摘したのは、プログラマーが主に実行する最も基本的なデバッグ機能です。例外ブレークポイントやプログラムのロードなどのオプションは他にもありますが、始めたばかりの場合は別の日にすると確信しています。

于 2012-10-02T20:28:50.060 に答える