XCodeは1つを使用します:Xcodeの基本操作



Xcode Uses One Xcode Basic Operation



https://blog.csdn.net/hitfyb/article/details/50875690

(1)コンソール

シフト+コマンド+ Y :コンソールの表示(デバッグ領域の表示/非表示)



シフト+コマンド+ C :フォーカスコンソールをアクティブにすると、カーソルがコンソールに配置され、入力できるようになります。

Command + K:コンソールをクリアします([デバッグ]-> [デバッグワークフロー]-> [コンソールのクリア])



インストール可能 BBUDebuggerTuckAway プラグイン、入力時にデバッグコンソールを自動的に非表示にします

(2)ブレークポイント

コマンド+ :現在の行の設定/ブレークポイントのキャンセルマウスでサイドバーの青いブレークポイントをクリックします 有効/無効 現在の行のブレークポイント。

コマンド+ Y:すべてのブレークポイントをグローバルにアクティブ化または非アクティブ化し、デバッグモードでアクティブ化します(ブレークポイントは青色で表示されます)。



ガターのブレークポイント/警告は、ブレークポイント/問題ナビゲーターの[表示]で右クリックできます。

トリック:ブレークポイントを編集する (ブレークポイントの編集):

状態 :ブレークポイントのトリガー条件を設定します。たとえば、「i == 3」(スペースを入れることはできないことに注意してください)は、iが3に等しいときにブレークポイントがトリガーされることを示します。

無視する :ブレークポイントの設定は 無視する 5に設定されている場合、ブレークポイントが6回検出されたときにトリガーされます。

アクション :ブレークポイントトリガーを設定します アクション デバッガコマンド、ログメッセージ、シェルコマンド、またはサウンドにすることができます。

たとえば、次のデバッガコマンドを設定できます。

[1] std :: string sigのメモリバッファ値を読み取ります:mem read sig.c_str()-c sig.size()

[2] NSDataインスタンスsigを出力します:posig

(3)デバッグ

F6:プロセスを段階的にステップオーバーするステップオーバーは、関数本体に入りません。

(( fn +)F7 :(ステップイン)関数本体に入ります。マルチメディアキーと競合する可能性があるため、fnの支援が必要です(推奨) ファンクションキーF1〜F12を標準ファンクションキーとして設定します )。

(( fn +)F8:ステップアウト機能本体。 iTunesの呼び出しなど、マルチメディアキーと競合する可能性があるため、fnの支援が必要です。

Control + command + Y:ブレークポイントから実行を続行します(一時停止/続行)。

Control + command + C:カーソルの現在の行まで実行します(現在の行に進みます)。

トリック:命令ポインタを移動する (( 命令ポインタを移動します ):

ブレークポイントのデバッグが実行されているときに、緑色のポインタ矢印(47行目)を別の行(49行目)または他のブレークポイント(51行目)に移動してジャンプを実行できます。

Command + 8は、デバッグログを表示できる左側のナビゲーションバーのログレポートナビゲーターに焦点を当てることができます。

(4)見る

shift + command + M:デバッグワークフロー-> メモリを表示

デバッグワークフロー->表示 分解 デバッグ時には、アセンブリ命令レベルのデバッグを実行できます。

トリック:可変メモリ値を変更する (( デバッグ中にメモリ値を変更する ):

デバッグ時に、下部のデバッグウィンドウで変数を右クリックできます(デバッグ領域。Shift+ Command + Yで呼び出すことができます)。メモリの表示/値の表示に加えて、を選択することもできます 値の編集 実行時にメモリ変数の値を編集します。

再現が難しい特定のバグや境界テストをデバッグするときに役立ち、測定サンプル値(ハードコード)を変更するたびにリンクを再コンパイルする手間が軽減されます。

(5) Lldbdebugコマンド

  • n / next:step over、F6と同等
  • s / step:step into、(と同等 fn +)F7;
  • 仕上げ :ステップアウト、(と同等 fn +)F8;
  • c / continue:次のブレークポイントに移動します。^⌘Yと同等です
  • Expr / expression:C / ObjC / C ++式を評価します(C / ObjC / C ++式の動的実行)
  • p / print / expr / :C / C ++基本変数として出力;
// SYSTEM_VERSIONを出力します(UIDevice *変換を追加する場合があります)
(lldb)p [[[UIDevice currentDevice ] systemVersion] doubleValue]
  • po / expr -O / expression -O:Objective-Cオブジェクトとして出力;
//画面の境界を出力します(UIScreen *変換を追加する場合があります)
(lldb)po NSStringFromCGRect([[UIScreen メインスクリーン ]境界])
//ステータスバーフレームを印刷します(UIApplication *変換を追加する場合があります)

(lldb)po NSStringFromCGRect([UIApplication sharedApplication ] .statusBarFrame)

//現在のkeyWindowのルートビューを出力します(UIViewController *変換を追加する場合があります)

(lldb)po [[[UIApplication sharedApplication ] keyWindow] rootViewController]

  • コールコール。実際、上記のp / poに続く式(式)には、を呼び出す機能もあります。通常、この呼び出しは、明示的な出力や戻り値が必要ない場合にのみ使用され、呼び出し元のコードを挿入するための動的デバッグに使用されます。
    たとえば、viewDidLoad:にブレークポイントを設定し、プログラムが中断されたときに次のコマンドを入力できます。
//呼び出し後、プログラムの実行を続行すると、ビューの背景色が赤に変わります
(lldb)call [self.view setBackgroundColor:[UIColor 赤色]]
  • bt (バックトレース)、現在の呼び出しスタック(クラッシュスタック)を出力し、「btall」はすべてのスレッドのスタックを出力します(Command +6のCommand +ナビゲーションに相当)。
  • 画像 :アドレス指定に使用できます。複数のコマンドが組み合わされています。より実用的な方法は、スタックアドレスに対応するコード(行)の位置を見つけることです。
    たとえば、UITableViewには合計2つのセクションがあります。 currentSection.index≥2が参照されると、[UITableView rectForHeaderInSection:]呼び出し例外が発生します。 exprを使用して値を動的に変更し、クラッシュシーンを作成できます。シミュレーションのデバッグ。
    この時点でのクラッシュ時のコンソールBT表示例外は、アプリケーション層コード '0x00d055b8- [FACategoryTableView FACategorySectionHeaderDidTouched:] +744'(0x00d055b8は現在のスタック(コードセグメント)オフセット、744は スタックフレーム オフセット-関数エントリからのPCポインタのオフセット)。
    では、FACategoryTableView.mファイルのコード行呼び出しによって引き起こされる例外は何ですか?この時点で、btの呼び出しスタック内の「コードルックアップ--address」に続いてコードセグメントオフセットアドレス(0x00d055b8)を使用すると、例外呼び出しのコード行の位置を見つけることができます。
  • バツ / memory 読み取り:デバッグ中のプロセスのメモリ、続いて 開始および停止 アドレスまたは-cはカウントプラスを指定します 開始 住所。 memがヘルプを表示するために読むのを手伝ってください:

構文

メモリ読み取り[]

コマンドオプションの使用法

サイズはブロック(チャンク)のサイズを指定します

--size):選択した形式で表示するときに使用するバイト単位のサイズ。

Countは、開始アドレスで使用できるメモリブロック(ブロック/アイテム)の数を指定します。

-c(-count):表示するアイテムの総数。

Formatは、コンテンツの表示形式を指定します。形式は、print:c-char、s-string、d-decimal、x-hexと同じです。

-f(-format):表示するフォーマットを指定します。

コマンドサンプル

(a)開始アドレスと終了アドレス。以下は、開始アドレスオフセットに基づいてカットオフアドレスを指定します。

(lldb) mem read 0x10b88f0c 0x10b88f0c + 9

0x10b88f0c:39 38 37 36 35 34 33 32 31 987654321

(b)開始アドレスの後に-cを使用して、ダンプする必要のあるバイト数を指定します。上記は同等です:

(lldb) mem read 0x10b88f0c -c 9

0x10b88f0c:39 38 37 36 35 34 33 32 31 987654321

(c)開始アドレス+メモリブロックサイズ+メモリブロック数(16進ダンプ形式)

(lldb) メモリ読み取り-s1 -f x -c 9 0x10b88f0c

0x10b88f0c:0x39 0x38 0x37 0x36 0x35 0x34 0x33 0x32

0x10b88f14:0x31

説明 :dumpのメモリチャンクは1バイトであり、上記の合計はチャンクサイズ*チャンクカウント= 9バイトをダンプします。

(d)開始アドレス+メモリブロックサイズ+メモリブロック数(ダンプ文字形式)

(lldb) メモリ読み取り-s1 -f c -c 9 0x10b88f0c

0x10b88f0c:987654321

(e)開始アドレス+メモリブロックサイズ+メモリブロック数(ダンプ文字列形式)

(lldb) mem read 0x10b5cf2c -f s -c 1

0x10b88f0c: '987654321'

(f)開始アドレス+メモリブロックサイズ+メモリブロック数(ダンプint形式)

(lldb) メモリ読み取り-s4 -f x -c 3 0x10b88f0c

0x10b88f0c:0x36373839 0x32333435 0x109f0031

説明:上記で指定されたチャンクサイズは4バイト(-s 4)、チャンクの数は3、合計12バイトがダンプされます。

  • 記憶 書き込み:デバッグ中のプロセスのメモリに書き込みます。 memがヘルプを書くのを手伝うことができます:

構文:memory write [[...]]

トリック:lldb印刷の無効な問題

LLDBデバッグコマンドp / poを使用してCタイプ(複合タイプを含む)またはObjective-Cオブジェクトを印刷する場合、属性が存在しないか、タイプが一致しないという問題が発生する可能性があります。

例1 -ブレークポイントのデバッグ、現在のUIViewControllerのフレームを出力します。

  • Xcode lldb自体のバグが原因で、実行など、属性へのポイント参照が認識できない場合があります。 (lldb) p self.view.frameエラー:タイプ 'UIView *'のオブジェクトにプロパティ 'frame'が見つかりません
  • プロパティへのポイント参照をプロパティへのゲッター呼び出しに変更し、実行します (lldb) p [self.view frame]でもエラーが発生します:既知のメソッドがありません '-frame'は、メソッドの戻り値の型にメッセージを送信します
  • Xcode lldb自体のバグのため、返された複合型を直接認識できません。この場合、表示型変換を使用して実行できます (lldb) p(CGRect)[self.view frame]はエラーを報告しません!

例2-ブレークポイントのデバッグ、現在のUIViewControllerのnavigationControllerスタックとchildViewControllers配列の出力:

ポイント参照エラー表記(プロパティが見つかりません): (lldb) po self.navigationController.viewControllers

正しく印刷するには、getterを呼び出します。 (lldb) po [[self NavigationController] viewControllers]

ポイント参照エラー表記(プロパティが見つかりません): (lldb) po self.childViewControllers

正しく印刷するには、getterを呼び出します。 (lldb) po [self childViewControllers]

(6)有効 NSZombieEnabled EXC_BAD_ACCESSをデバッグします

解放されたオブジェクト(その90%は参照カウントが0のオブジェクトである可能性があります)にメッセージを送信するか、それらの自動解放オブジェクトを解放すると、EXC_BAD_ACCESSなどのエラーが発生します。
デフォルトでは、Xcodeは、リリースされたオブジェクトを使用してはならないコード行へのポインターを提供しません。または、リリースが間違っています。
製品->スキームの編集 (オプション+コマンド+ R) ->診断 、「Objective-Cの後」を確認してください ゾンビオブジェクトを有効にする 」。
NSZombieEnabled環境変数を設定した後、オブジェクトは破棄されると_NSZombieに変換されます。 NSZombieEnabledを設定した後、すでにリリースされているオブジェクトにメッセージを送信すると、このオブジェクトはEXC_BAD_ACCESSクラッシュを報告するだけではありません。また、エラーメッセージを出力し、予測可能な方法で消えてデバッグブレークポイントを生成するため、誤ってリリースまたは参照されているオブジェクトを特定できます。
注意 :NSZombieEnabledは、デバッグ中にのみ使用できます。 NSZombieEnabledは実際にはdeallocオブジェクトのメモリを解放しないため、製品がリリースされたときにそれを削除することを忘れないでください。

参照

Xcodeの概要-Xcodeについて 》《《 Xcodeキーボードショートカットとジェスチャー

Xcodeキーバインディングとジェスチャ 》《《 Xcodeの効率を改善するためのヒント

Xcode5.1オフラインインストール 》《《 Xcodeプラグイン

VimエディターでXcodeを支援する 》《《 Vimコマンド図とxVimの使用 》《《 Xcode7をアップグレードした後の無効なXVimプラグインの修復方法

Xcodeファイルの編成 》《《 Xcodeはコマンドラインの起動パラメータを設定します

Xcode環境変数とパス設定 》《《 Xcodeビルド出力ディレクトリ

VCからXcodeへ 》《《 ワークスペース&サブプロジェクト&ターゲット

Xcodeは静的ライブラリを作成します 》《《 Xcode4は静的ライブラリを作成します 1 '' Xcode4は静的ライブラリを作成します 二'

Xcode4.3でフレームを作成する 》《《 Xcodeは依存する静的ライブラリエンジニアリングを追加します

iPhoneSDKを使用した静的ライブラリの構築 》《《 静的ライブラリとクロスプロジェクトリファレンス

iOS開発用の統計Xcodeコード行 》《《 今すぐiOSアプリの開発を始めましょう

Xcodeを使用してHelloWorldプロジェクトを作成する 》《《 Xcode5とInterfaceBuilderを使用してHelloWorldアプリを作成する

LLDBクイックスタートガイド 》《《 LLDBからGDBへのコマンドマップ 》《《 Xcode gdb / lldbdebugコマンド

XcodeLLDBデバッグチュートリアル 》《《 LLDBデバッグコマンドをプローブします 》《《 iOSアプリのクラッシュログが明らかに 》《《 iOSアプリのログを実行する

lldbで効率を改善しましょう 》《《 iOS / OSXデバッグ:ダンス! LLDBでワルツを踊る 》《《 NSLogが非効率的で、lldbブレークポイントを使用してログを印刷しようとする理由