2013-05-23 3 views
1

callgrind의 일부 결과에서 KCacheGrind를 실행하려고합니다. 기본적으로 코드베이스는 특정 기능을 실행하기 위해 공유 객체를 시작하는 플러그인 컨테이너입니다. Callgrind를 사용하여이 응용 프로그램을 프로파일 링 할 때 기능 수준에서는 비용을 볼 수 있지만 소스 수준에서는 비용을 볼 수 없습니다.Callgrind에서 동적으로로드 된 소스가 표시되지 않습니다.

SO를 시작하기 전에 플러그인 컨테이너 코드로 소스 레벨에서 볼 수 있지만 실행 된 SO에 포함 된 코드는 볼 수 없습니다.

내가 디버깅 기호를 사용하여 컴파일 중이라는 것을 알고 있지만, 어떤 이유로 동적으로로드 된 SO 소스 코드를 볼 수 없습니다.

감사합니다.

+0

최소한의 예 (두 개의 소스 파일,'main'과 하나의 함수, 하나의 공유 라이브러리, 하나의 실행 파일)로 문제를 재현 할 수 있습니까? KCacheGrind/Annotations 설정/구성을하고 소스 기반을 명시 적으로 추가하면 어떻게됩니까? –

답변

2

이 문제도 발생했습니다. 이 문제를 해결하는 방법은 호스트 응용 프로그램이 종료되기 전에 플러그인을 언로드하지 않도록하는 것입니다. 제 경우에는 루아에 대한 C 모듈을 프로파일 링하려고했는데 루아가 VM이 정상적으로 종료되었을 때 모듈을 언로드하고있었습니다. 이 문제를 해결하기 위해 스크립트를 강제 종료하기 위해 os.exit()을 호출했습니다.

플러그인 컨테이너에서 플러그인 언로드를 사용하지 않도록 설정하거나 플러그인을 만들면 응용 프로그램을 강제 종료 할 수 있습니다 (_exit (0) 호출).

+0

플러그인 컨테이너 작업도 종료됩니까? 'ps -ef | grep '그리고 나서 그것과 관련된 pid를 죽입니까? 보통 SIGTERM Ctrl-D 대신에? – jluzwick

+0

나는 결국 dlclose 호출을 제거하고 끝냈다. – jluzwick