2013-02-14 1 views
4

나는 사용자 스택 크기를 추적하는이 간단한 DTrace를 스크립트 건너했지만,이 OS X 마운틴 라이온에서 작동하지 않습니다 :DTrace : OS X에서 사용자 스택 크기를 추적 하시겠습니까? (curthread-는> t_procp-> p_stksize?)

dtrace -n 'sched:::on-cpu { @[execname] = max(curthread->t_procp->p_stksize);}' 

(에서 : http://www.solarisinternals.com/wiki/index.php/DTrace_Topics_One_Liners)이 오류는 OS X에 반환

은 다음과 같습니다 실제로

dtrace: invalid probe specifier sched:::on-cpu { @[execname] = 
    max(curthread->t_procp->p_stksize);}: in action list: 
    t_procp is not a member of struct thread 

, 나는 "curthread"의 유효 회원 OS X의에 무엇인지 알아 내려고 힘든 시간을 보내고있어 동등한가 현재 사용자 스택 크기까지 드릴 다운하는 방법 스레드? 아니면 OS X에서 단지 불투명 한 포인터 인 "curthread"입니까? 스레드 식별에만 사용할 수 있습니까? 이것이 "pid"공급자를 통해이 추적을 수행하는 것이 행복 할 것입니다.

감사합니다.

+2

OSX의'구조체 thread' 여기에 있습니다 : :

예를 들어,이 스크립트는 -abortEditing 메서드가 호출되면 모든 방법을 최대 2 호출 깊은 호출 녹화를 시작합니다 HTTP : // WWW .opensource.apple.com/source/xnu/xnu-2050.9.2/osfmk/kern/thread.h – trojanfoe

+0

고마워, 그건 확실히 흥미 롭지 만, 나는 아직도 거기에서 사용자 스택 크기로 어떻게 움직이는 지 모르겠다. OS X 구조체는 t_procp-> p_stksize를 특징으로하는 (추정 된) Solaris 구조체와는 다릅니다. –

+1

다양한 소스를 검색 할 때 OSX에 상응하는 것으로 보이지 않습니다. 커맨드 라인에서'apropos dtrace'를 시도하면 Mac에서 제공되는 스크립트를 볼 수 있습니다. 그들 중 누구도 당신이 찾고있는 것을 제공하는 것처럼 보이지 않으므로 직접 작성해야 할 수도 있습니다. – trojanfoe

답변

0

도큐멘트를 찾지 못했지만 Instruments이 사용자 스택 크기를 기록하는 것을 지원한다는 사실을 발견했습니다. dtrace 내보내기를 사용하여 변수가 내장 변수 인 ustackdepth을 통해 결정되었습니다.

#!/usr/sbin/dtrace -s 
#pragma D option quiet 

objc$target::*abortEditing*:entry 
/thread == 0/ 
{ 
start = ustackdepth; 
thread = tid; 
} 

objc$target:::entry 
/thread == tid && ustackdepth - start < 2/ 
{ 
printf("%*s %s %s\n", ustackdepth - start + 3, "->", probemod, probefunc); 
} 

objc$target:::return 
/thread == tid && start == ustackdepth/ 
{ 
thread = 0; 
} 
+0

ustackdepth는 스택 프레임의 수라고 생각합니다. 바이트 단위로 실제 스택 크기를 알고 싶습니다. 이것은 Mac에서 쉽게 할 수없는 것 같습니다. –

+0

아, 맞아 - 다른 질문에 대한 답변입니다. – akvadrako

관련 문제