2011-08-21 3 views
0

NSLock, NSThread, NSObject 등과 같은 시스템 클래스가없는 DTrace을 사용하여 사용자 정의 클래스 및 메서드를 인쇄하는 방법은 무엇입니까?Mac OS X에서 DTrace를 사용하여 시스템 방법 또는 시스템 프레임 워크없이 감지하는 방법은 무엇입니까?

다음 D 코드를 사용하면, 정의 된 사용자 시스템 등 목적-C 방법을 모두 추적 할 수 있습니다 :

objc$target:::entry 
{ 
    printf("%s %s\n", probemod, probefunc); 
} 

답변

1

의 DTrace는 커널과 사용자 공간에 대해 알고있다. 어떤 라이브러리가 시스템의 일부이고 무엇이 시스템의 일부인지는 알지 못합니다.

코코아 규칙을 준수하고 모든 클래스 앞에 정확하게 접두어를 붙이면 프로브 이름에 접두사를 지정할 수 있습니다. 예 : 당신의 접두사 VIC 경우 :

objc$target:VIC*::entry 
{ 
    printf("%s %s\n", probemod, probefunc); 
} 

이 프로브는 전달 된 클래스는 VIC로 시작하는 경우에만 해고 될 것입니다.

+0

나는 단지 사용자 defind (내 코드)를 모니터링하고 싶습니다. "VIC"와 같은 접두어를 사용하면 VIC 클래스를 얻을 수 있습니다. 다른 방법입니까? – victor

+0

[USDT provider] (http://blogs.oracle.com/dap/entry/writing_a_dtrace_usdt_provider)를 만들고 추적하려는 곳 어디에서나 호출 할 수 있습니다. – Kentzo

관련 문제