2012-02-18 2 views
4

내 C 프로그램에서 함수 내부에서 보낸 시간을 측정하는 DTrace 스크립트를 작성했습니다. 프로그램 자체가 실행되고 일부 데이터가 출력 된 다음 종료됩니다.수명이 짧은 응용 프로그램 dtracing

문제는 프로세스 ID를 얻고 DTrace를 시작하는 것이 빠른 방법이라는 것입니다.

현재 DTrace를 시작할 충분한 시간을 제공하는 코드 내에 sleep() 문이 있습니다. 정보를 얻기 위해 코드를 수정해야 Dtrace ...의 목적을 다소 상실 할 수 있습니다.

기본적으로 DTrace는 프로세스 ID가 나타나기를 기다리고 그 스크립트를 실행합니다.

+0

저는 전문가는 아니지만 'dtruss'가 유용 할 수 있습니다. – arrowd

+0

@arrowdodger 제가 알 수있는 한, dtruss는 프로세스 시스템 호출에 대한 정보를 인쇄 할 수있게 해줍니다. 근본적으로 문제는 프로세스 ID를 얻고 DTrace를 시작하기 위해 내 프로그램이 빨리 끝나는 것입니다. 더 명확하게하기 위해 제 질문을 수정했습니다. – bing

+3

나는 이상한 이유로 나는 내 자신의 질문에 대답 할 수 없다. 그래서 나는 그것을 여기에 올리고있다. 해결책은 매우 간단합니다. DTrace 스크립트에서 pid 공급자를 "pid $ target"으로 변경 한 다음 명령 줄에서 "dtrace -s myscript.d -c ./myProg myFuncToAnalyse"를 사용합니다. – bing

답변

5

아마 당신은 pid 공급자를 사용하고 있습니다.이 경우 프로세스를 만들기 전에 프로브를 활성화 할 방법이 없습니다. 이것에 대한 일반적인 해결책은 "-c"옵션을 사용하여 dtrace 자체에서 프로그램을 호출하는 것입니다.

어떤 이유로 든 할 수 없다면 (즉 다른 프로세스에서 설정 한 환경에서 프로세스를 시작해야하는 경우)보다 복잡한 방법을 시도해 볼 수 있습니다 : proc ::: start 또는 proc : :: 프로그램이 실제로 시작될 때 추적하려면 exec-success를 사용하고 stop() 작업을 사용하여 해당 지점에서 프로그램을 중지 한 다음 system()을 사용하여 PID 공급자를 사용하는 다른 DTrace 호출을 실행 한 다음 "prun" 다시 프로그램.

관련 문제