2011-01-06 4 views
3

조립 라인 프로파일 링을 돕기 위해 온라인에서 검색하고있었습니다. 검색 한 결과 무언가를 찾았습니다 http://www.webservertalk.com/message897404.html이 DTrace 스크립트를 실행하여 응용 프로그램을 프로파일 링하려면 어떻게해야합니까?

이 문제의 두 부분으로 나뉩니다. 그룹화를 결정하기 위해 특정 유형의 명령 (inc, add, shl 등)을 모두 찾은 다음 어느 것이 실행되고 수정되었는지를 계산합니다. 디스어셈블러로 그룹핑하는 것만으로 충분하지 않으면 첫 번째 비트는 까다 롭습니다. Dtrace는 어떤 명령어가 실행되고 있는지를 파악하기 위해 (적어도 유저 랜드에서는) 당신의 친구입니다.

이 작업을 수행하는 가장 좋은 방법은 각 기본 블록의 시작 부분에 불과합니다. 이것들을 발견하는 것은 지금 수동적 인 과정이 될 것입니다 ... 그러나, 각 지시를 도구화하는 것은 작은 응용들에 대해 실행 가능합니다. 이 예에서

#pragma D option quiet 

pid$target:a.out::entry 
/address[probefunc] == 0/ 
{ 
    address[probefunc]=uregs[R_PC]; 
} 

pid$target:a.out:: 
/address[probefunc] != 0/ 
{ 
    @a[probefunc,(uregs[R_PC]-address[probefunc]), uregs[R_PC]]=count(); 
} 

END 
{ 
    printa("%s+%#x:\t%d\t%@d\n", @a); 
} 
main+0x1:   1 
main+0x3:   1 
main+0x6:   1 
main+0x9:   1 
main+0xe:   1 
main+0x11:   1 
main+0x14:   1 
main+0x17:   1 
main+0x1a:   1 
main+0x1c:   1 
main+0x23:   101 
main+0x27:   101 
main+0x29:   100 
main+0x2e:   100 
main+0x31:   100 
main+0x33:   100 
main+0x35:   1 
main+0x36:   1 
main+0x37:   1 

: 지금

main() 
{ 
    int i; 

    for (i = 0; i < 100; i++) 
    getpid(); 
} 

우리의 약간 까다로운 D 스크립트 : 테스트중인

첫째, 우리의 아주 사소한 C 프로그램 : 다음은 예입니다 주어진이 정확하게 이것은 내가 필요합니다. 그러나 DTrace 프로그램을 저장하는 방법, 결과를 얻고 자하는 코드로 실행하는 방법에 대해 잘 모릅니다. 그래서 좋은 DTrace 배경을 가진 일부 사람들이 코드를 이해하고 저장하고 실행하여 결과를 얻는 데 도움이 될 수 있기를 희망합니다.

답변

4

만약 당신이 단순히이 특정의 DTrace 스크립트를 실행 수행합니다 .D 스크립트 파일에 저장하고 다음과 같은 명령을 사용하고자하는 모든 컴파일 된 실행 파일에 대해 실행하려면 다음

sudo dtrace -s dtracescript.d -c [Path to executable] 

dtracescript.d을 스크립트 파일 이름으로 대체하십시오.

여기에는 DTrace가 시스템의 일부로 설치되어 있다고 가정합니다 (Leopard 이후 Mac OS X를 실행 중입니다).

어떻게 작동하는지 궁금하다면 잠시 전에 MacResearch 용 DTrace를 사용하는 두 부분으로 된 튜토리얼을 작성했습니다.이 튜토리얼은 herehere입니다.

+0

많이 감사합니다! 나는 특히 코드의 설명을 보는 것이 실제로 매우 흥미 롭다. 나는 우분투 리눅스를 가지고있다. DTrace가 우분투의 일부가 아닐 경우 ... 컴파일 된 코드에 플래그가 필요합니까? gcc -pg 또는 꼭 그렇지는 않습니까? –

+0

DTrace는 우분투에서 작동합니까? 일반적으로 리눅스? –

+0

@Syntax_Error - DTrace는 커널 수준에 있어야하며 라이센스 문제로 인해 Linux에없는 것처럼 보입니다. http://stackoverflow.com/questions/2059311/whats-an-alternative-for-dtrace-on -linux. 올바르게 호출하면 실행 파일에 특별한 컴파일러 설정이 필요하지 않습니다. 스크립트가하는 한, 링크 된 기사로 이동하게됩니다. 여기에 구문을 설명하고 자세한 정보를 얻기 위해 다른 리소스를 지적하기 때문입니다. –