2014-01-17 7 views
4

현재 LD_PROFILE 환경 변수를 사용하여 미리로드 된 공유 라이브러리의 프로파일을 작성하려고합니다.LD_PROFILE로 미리로드 된 공유 라이브러리 프로파일 링

"-g"플래그로 라이브러리를 컴파일하고 미리로드 된 라이브러리로 응용 프로그램 (ncat)을 실행하기 전에 LD_PROFILE_OUTPUT 및 LD_PROFILE을 내 보냅니다. 그래서, 내가하는 일은 다음과 같습니다 :

  1. "-g"플래그가있는 공유 라이브러리 libexample.so를 컴파일하십시오.
  2. export LD_PROFILE_OUTPUT=`pwd`
  3. export LD_PROFILE=libexample.so
  4. 실행 LD_PRELOAD=`pwd`/libexample.so ncat ...

자체를 미리로드하는 작업을 수행하고 내 라이브러리가 사용되지만 파일 libexample.so.profile이 생성되지됩니다. 대신 export LD_PROFILE=libc.so.6을 사용하면 예상대로 libc.so.6.profile 파일이 있습니다.

LD_PRELOAD와 LD_PROFILE을 결합하는 데 문제가 있습니까? 아니면 잘못했을 수도 있습니다.

관련성이있는 경우 CentOS 6.4에서 glibc v2.12를 사용하고 있습니다.

고맙습니다.

답변

0

죄송합니다. 왜 LD_PROFILE이 LD_PRELOAD와 함께 작동하지 않는지에 대한 답을 모르겠습니다.

그러나 -g로 컴파일 된 프로파일 링 바이너리의 경우 grapichal 도구 kcachegrind와 함께 valgrind 도구를 정말 좋아합니다.

Valgrind의 --tool = callgrind /를 때 프로그램의 PID 실행 된 1234 callgrind.out.1234 같은라는 파일을 생성합니다 옵션

와 경로 /로/어떤/이진. 그 파일을 분석 할 수 있습니다 :

이 callgrind.out.1234

에서를 kcachegrind kcachegrind 쉽게 대부분의 CPU 시간이 spended되어 기능하는, 호출 수신자지도도 NISE 그래픽 방식으로이 문제를 보여줍니다 볼 수 있습니다. 콜 그래프는 프로그램 작동 방식을 이해하는 데 도움이 될 수 있습니다. 소스 코드를보고 각 라인에서 얼마나 많은 CPU 시간을 소비하는지 확인할 수 있습니다.

귀하의 LD_PROFILE 질문에 대한 답변이 아니더라도 valgrind를 유용하게 사용할 수 있기를 바랍니다. valgrind의 단점은 valgrind가 프로파일 링과 메모리 검사에 사용될 때 속도가 느려진다는 것입니다.