2010-12-08 2 views
4

많은 JNI를 사용하는 네이티브 애플리케이션 코드와 상호 작용하는 안드로이드 프로젝트를 개발 중입니다.런타임에 안드로이드에서 네이티브 레이어의 스택 트레이스를 얻는 방법 프로그래밍 방식으로

내 기본 응용 프로그램 코드의 일부가 충돌하여 Java 응용 프로그램이 멈추는 경우가 종종 있습니다. 나는 적어도 세그먼테이션이나 그 어떤 것도 잡아낼 수있는 시그널 핸들러를 네이티브 레이어에서 발생 시켰고, 따라서 자바 레이어를 우아하고 깔끔하게 종료 시켜서 다음에 시작할 때 전체 애플리케이션을 종료하도록했다.

지금은 아직 네이티브 레이어에 남아있는 충돌이 있지만 Logcat으로 디버깅 할 수있는 단계에 이르렀습니다.

아무도 내가 네이티브 응용 프로그램의 세그먼트 화/신호 처리시 스택 추적을 캡처 할 수 있도록 도와 줄 수 있습니까? 네이티브 코드는 안드로이드의 NDK toolchain을 사용하여 컴파일되고 apk로 ant와 연결됩니다.

나는 네이티브 레이어에서 무슨 일이 일어나는지 알 수있는 절실히 필요합니다.

감사합니다.

답변

0

체크 아웃 읽을 수있는 스택 추적 생성에 내 게시물 :

http://codemaemo.appforce.org/2010/07/more-on-android-crash-stack-trace/

을 어떻게 디버깅을 위해 DDD를 사용하는 방법 : 답장을

http://codemaemo.appforce.org/2010/07/debugging-native-android-code-with-ddd/

+1

감사하지만,이 두 방법이 필요 수동으로 한 방향으로 또는 다른 코드를 실행할 때 괜찮습니다. 그러나 응용 프로그램을 배포하고 고객 측에서 실행할 때 문제가 발생하면 logcat 출력이나 다른 방법으로 문제를보고 할 수있는 방법이 필요합니다 (예 : 파일 덤프)가 포함되어 있습니다. 어떤 식 으로든 런타임시 코드를 통해 스택 랫트를 캡처 할 수있는 방법이 필요합니다. 충돌시와 JVM이 프로세스를 종료하기 전에. 이미 작성된 크래시 처리기가 있습니다. – Puneet

+0

질문을 편집하여이를 반영하고 "수동 실행"이 의미하는 바를 설명하고 "수동 실행"없는 솔루션을 어떻게 상상할 수 있습니까? – ognian

+0

글쎄, 수동으로 실행한다는 것은 크래시가 발생한 후 스크립트를 실행하거나 애플리케이션을 실행하기 전에 ndk-gdb를 실행해야한다는 것을 의미합니다. 어떤면에서는 IDE 또는 adb를 사용하여 프로그램을 실행하십시오. 응용 프로그램을 다운로드하고 설치 한 다음 실행하는 방법을 추천했습니다 (이 경우 adb 또는 IDE를 사용할 수 없음). – Puneet

관련 문제