DTraceを使用して、実行中のアプリケーションを監視し、呼び出されたメソッドとクラスを確認できます。コマンドラインでDTraceを使用してシミュレータで実行されているiOSアプリを簡単に監視できます。まず、を使用してアプリケーションのPIDを見つける必要があります。ps
次に、次のようにDTraceプローブを実行できます。
sudo dtrace -q -n 'objc1234:::entry { printf("%s %s\n", probemod, probefunc); }'
ここで、1234はアプリのプロセスIDです。
これにより、次のような出力が生成されます。
UIStatusBarItemView -isVisible
UIStatusBarLayoutManager -_positionAfterPlacingItemView:startPosition:
UIView(Geometry) -frame
CALayer -frame
UIStatusBarLayoutManager -_startPosition
UIView(Geometry) -bounds
CALayer -bounds
UIStatusBarItemView -standardPadding
UIStatusBarItem -appearsOnLeft
UIStatusBarItem -leftOrder
たとえば、単一のクラスのトレースのみに関心がある場合はUIView
、次を使用できます。
sudo dtrace -q -n 'objc1234:UIView::entry { printf("%s %s\n", probemod, probefunc); }'
dealloc
すべてのクラスのすべての呼び出しをトレースする場合は、次を使用します。
sudo dtrace -q -n 'objc1234::-dealloc:entry { printf("%s %s\n", probemod, probefunc); }'
UIView
dealloc
明らかに、これらを組み合わせてsのみを表示することができます。
sudo dtrace -q -n 'objc1234:UIView:-dealloc:entry { printf("%s %s\n", probemod, probefunc); }'
クラスの特定のオブジェクトを区別できるようにしたい場合はself
、以下を使用してオブジェクトのメモリアドレス()を出力することもできます。
sudo dtrace -q -n 'objc1234:UIView:-dealloc:entry { printf("%s (0x%p) %s\n", probemod, arg0, probefunc); }'
DTraceは非常に強力で、ここで示したよりもかなり多くのことを実行できます。