1

これは少し逆に思えるかもしれませんが、私は巨大な iOS アプリケーションを使用しており、ビジュアル インターフェイス要素 (ビュー、コントロール) がコードを呼び出している場所を理解しようとしています。残念ながら、ビューの多くは動的に構築されるため、Interface Builder に移動して Target/Actions および IBOutlets を確認するだけでは簡単ではありません。

一般に、コード内の所定の場所に事前にブレークポイントを設定し、ヒットするのを待つことによってブレークポイントを使用します。

さて、本質的に言うような方法で(おそらくLLDBを介して?)ブレークポイントを設定できるかどうか疑問に思っています... 「ねえ、次に何が実行されるのかわかりませんが、それが何であれ、そこでブレークします. "

これは、ビューとコントロールがコードに入る場所を把握するのに非常に役立ちます。

4

2 に答える 2

2

ニーリーが提案したことは、何が起こっているかの全体像を把握するための良い方法です。簡単な方法で簡単にコードを取得し、関連する基本クラスについて少し知りたい場合は、シンボリック ブレーク ポイントを使用できます。

たとえば、UIButton イベント コールバックのコードにアクセスしたいとします。次のシンボリック ブレークポイントを追加できます: '-[NSObject performSelector:withObject:withObject:]'。(はい 2 つの withObjects)。これはおそらく、いくつかのアセンブリ コードで停止します。幸いなことに、セレクターはレジスターにあるため、gdb: info レジスターまたは lldb レジスターの読み取りでセレクターが表示されるはずです。次に、cmd+shift+o (すばやく開く)、セレクターに貼り付けて (できれば単一の) 結果で Enter キーを押すか、コンテキストから判断します。

別の便利な例: '-[UIControl sendActionsForControlEvents:]'

さらに、UI コードを見つける良い方法は、UI コントロールが表示するテキストをプロジェクトで検索することです。

他のすべてが失敗した場合は、コード ベースへの貢献者が適切な命名規則に従い、ファイルを適切に整理したことを願っています。

編集:

セレクターが最初に表示されず、代わりに「_controlTouchBegan:withEvent」のようなものが表示された場合は、関連するセレクターにヒットするまで続行します。

于 2013-09-25T22:06:11.867 に答える
2

Instrumentsアプリケーションを使用できます。Xcode から [製品] > [プロファイル] を選択し、[iOS シミュレーター] > [CPU オプション] で [時間プロファイラー] を選択します。プロフィールボタンを押します。分析したいことをアプリに実行させてから、Instruments ウィンドウの左上にある Stop ボタンを押します。コール ツリーの折りたたまれたビューが表示されます。これを展開して (ヒント: シンボルのすべての子孫を一度に展開するには、開閉用三角形をオプションクリックします)、参照して実行パスをたどります。

于 2013-09-25T21:37:40.367 に答える