2009-04-28 3 views
4

저는 특정 입력이 주어진 다양한 Linux 프로그램 (C로 작성된)에서 어떤 함수가 호출되는지 찾아야하는 프로젝트에 참여하고 있습니다. 현재 나의 접근 방식은 -pg (프로파일 링 옵션)을 사용하여 프로그램을 컴파일하고 실행하며 gprof의 출력을 처리하여 호출되는 함수를 찾는 것이다. 적어도 한 번 이상 호출 된 함수 만 출력 파일에 나타납니다.소스를 수정하지 않고 다중 프로세스 프로그램에서 호출되는 함수 찾기?

명백한 문제는 하나의 프로세스 만 gprof 출력 파일에 쓸 수 있다는 것입니다. 프로그램이 여러 프로세스를 포크하는 경우 다른 프로세스에서 프로파일 출력을 얻지 못합니다.

gprof가 각 프로세스 (pid로 레이블 된 것일 수도 있음)에 대한 출력 파일을 생성하도록하는 방법이 있습니까? 이 매뉴얼에서는 각 프로세스가 다른 디렉토리로 변경되도록 제안하지만이 작업을 수행하기 위해 소스 코드를 수정하고 싶지는 않습니다. 도움이 될 Linux 용 도구가 있습니까?

답변

3

Here 그들은 tprof을 사용하는 것이 좋습니다 :

당신이 Valgrind의를 시도? 활성화되면

http://www.network-theory.co.uk/docs/valgrind/valgrind_17.html

--child-silent-after-fork=<yes|no> [default: no] 

는 Valgrind의 포크 호출 인한 자식 프로세스 디버깅 또는 로그 출력을 표시하지 않을 것이다. 이렇게하면 자식을 만드는 프로세스를 처리 할 때 출력을 혼란스럽게 만들 수 있습니다 (오해의 소지가 있음). 특히 --trace-children =과 함께 사용하면 유용합니다. XML 출력 (--xml = yes)을 요청하는 경우이 플래그를 사용하는 것이 좋습니다. 그렇지 않으면 자식 및 상위의 XML이 섞여 일반적으로 쓸모 없게 될 수 있기 때문입니다.

관련 문제