2011-08-31 5 views
3

Android 애플리케이션의 동적 라이브러리 호출을 프로파일 링해야하고이 목적을 위해 "ltrace"도구를 사용하여 프로파일 링하기로 결정했습니다. 나는 "ltrace"도구를 안드로이드 패키지에 결합한 다음 성공적으로 함께 컴파일했습니다. 보통의 리눅스 콘솔 응용 프로그램처럼 쉘 프로그램에서 잘 작동합니다.ltrace를 사용하여 Android 애플리케이션 프로파일하기

그러나 "Zygote"프로세스에서 분기 된 Android 애플리케이션을 올바르게 프로파일 링 할 수 없습니다. 나는 "Zygote"프로세스에 ltrace를 첨부하여 자식 프로세스를 처리하려고 시도했지만 SIGCHLD 및 SIGSTOP 신호 만 받았고 비정상적으로 종료되어 다음 오류를 보여줍니다. 누구도 안드로이드 시스템에 대한 프로파일 링 이런 종류의 시도 경우 0xffff0508

에서

예기치 않은 명령은 0xffffffff 난 그냥 궁금 해서요. 짧은 코멘트는 나에게 매우 도움이 될 수있다.

미리 감사드립니다.

답변

2

접합체에서 분기 된 후 안드로이드 응용 프로그램의 프로세스에 ltrace를 연결해보십시오. 당신은 안드로이드의 바이오닉 libc 용으로 만들어진 ltrace와 스레드를 합리적으로 다루는 라이브러리가 필요합니다.

자바 디버거의 연결을 기다리는 디버깅 할 수있는 Android 앱을 설정하는 방법이 있습니다. 그걸 사용하고 ltrace에 연결 한 다음 Java 디버거를 연결하고 연결을 끊어 다시 시작합니다. 이것은 시작의 전부는 아니지만 자신의 논리의 대부분을 캡처해야합니다.

IIRC 연결을 시도하고 다시 시도하는 시간 제한이 있습니다. 그렇지 않으면 응답하지 않는 응용 프로그램을 트리거하지 않도록 자체적으로 재개 할 수 있습니다.

Java 디버거를 사용하여 진행 상황을 확인한 다음 소스를 읽음으로써 원시 측에서 어떻게 구현되는지 확인할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다.하지만 실행 중간이 아니라 새 프로세스의 시작 부분에서 프로필을 작성하고 싶습니다. 그래서 저는 'zygote'에서 새로운 프로세스가 시작될 때부터 프로필을 작성하려고합니다. 그리고 그것은 Java 프로그램 자체가 아닌 외부 네이티브 동적 라이브러리 프로파일 링에 관심이 있기 때문에 자바 디버거가 내 용도로 사용되지 않는 것 같습니다. 나는 당신의 의견에 감사드립니다. –

+0

자바 디버거의 목적은 ltrace를 첨부 할 수 있도록 프로그램을 실행 초기에 중지하는 것이 었습니다. –

+0

당신 말이 맞아요. Java 디버거를 사용하여 엔트리 포인트에 중단 점을 설정할 수 있습니다. 하지만 내가 염려하는 것은이 방법이 소스 코드가있는 애플리케이션에서만 사용 가능한 것 같다. 소스 코드가없는 응용 프로그램의 항목에서 휴식을 취하는 것이 가능하다고 생각하십니까? 귀하의 매우 유용한 답변에 다시 한 번 감사드립니다. –

0

Chris Stratton 씨의 방법이 효과적입니다.

LoadLibrary()은 debbuging jni의 또 다른 포인트입니다.