2

何度も何度もリロードし続けるView Controllerがあります。リロードを実行し続けるメソッドを確認できるように、どのメソッドが呼び出されているかを確認できるようにしたいと考えています。エラーが発生してアプリがクラッシュした場合に何が呼び出されたかがわかります。ただし、この場合、クラッシュはありません。アプリ全体で呼び出されているすべてのメソッドを監視する方法はありますか?

4

3 に答える 3

3

XCode と Objective C を初めて使用し、軽量なものを探していて、大きなコードや多くのメソッドを持っていない場合は、次のようにします。

 NSLog(@"%s",__PRETTY_FUNCTION__);

あらゆる方法で。

于 2013-03-07T22:49:35.510 に答える
2

楽器を使用します。コードをプロファイリングモードで開始し、CPUタイムインストルメントを選択します。アプリが実行されると、Instrumentsは定期的にすべてのコールスタックに関する情報を収集します。これにより、何が何を呼び出すかを確認できます。(特定の関数の呼び出し元を表示するには、[呼び出しツリーの反転]オプションを使用します。)

于 2013-03-07T22:43:24.587 に答える
1

私はこのマクロを使用します:

#define DEBUG 1

#if DEBUG
#   define NLog(fmt, ...) printf("%s\n", [[NSString stringWithFormat:@"%s:%d  %@", __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:fmt, ##__VA_ARGS__]] UTF8String])
#else
#   define NLog(...)
#endif

次に、Macros.h を Application_Prefix.pch ファイルに含めて、どこでも使用できるようにします。出荷する前に、すべての NLog が消えるように DEBUG を 0 に設定しました。

そこで、NSLog を使用する代わりに、NLog を使用します。出力は次のようになります。

-[ApplicationDelegate applicationDidBecomeActive:]:86  applicationDidBecomeActive called!

このソリューションは、次の以前の投稿に基づいています。

  1. メソッド名と行番号を出力し、条件付きで NSLog を無効にする方法は?
  2. アプリケーションをリリースする前に NSLog を無効にする必要がありますか?

NLog 呼び出しをいくつかの場所に配置するだけで、View Controller がリロードされる直前にどの関数が呼び出されるかを確認できます。リロードをトリガーした正確な関数を知る必要がある場合は、他の人が述べたように、ブレークポイントを配置してコール スタックを調べるのが最善の策です。

于 2013-03-07T23:28:16.650 に答える