2013-02-02 1 views
2

내 프로젝트에서 버그를 추적 중입니다. 때때로, 내 응용 프로그램은 살해 도착과 로그 캣에서 다음 줄을 항상있다 :"신호 (11)로 프로세스가 종료되었습니다"는 항상 NDK와 관련이 있습니까?

D/Zygote ( xx): Process xxxx terminated by signal (11)

나는이 오류에 대한 검색되었고, 난 항상 찾을 수는 NDK에 언급은.

타사 C 라이브러리를 사용하는 프로젝트를 개발 중입니다. 라이브러리에 대해 자세히 알지 못하지만 서버와 네트워크 통신을 수행한다고 말할 수 있습니다. 내 프로젝트에는 여러 개의 Services이 있으며이 중 일부는이 라이브러리를 사용합니다.

제 질문은이 오류가 C 라이브러리의 문제임을 항상 암시합니까?

안드로이드에서 자바 코드 예제를 제공 할 수 있습니까?이 오류도 발생할 수 있습니다.

감사합니다.

EDIT : 그런데 logcat 출력에는 이전 줄 앞에 스택 추적이 없습니다.

+0

은 이전에 로그에 있던 신호 11이 아닌가요? IIRC this _process terminated_ 메시지는 체인의 마지막입니다. –

답변

1

아마도 로그에 SIGSEGV가보고되었을 것입니다. 그것은 최종 메시지보다 훨씬 오래 걸릴 수 있습니다. 이것은 나의 로그에 이러한 충돌 중 하나의 실제 스냅 샷입니다 :

01-29 16:00:39.124 F/libc (3033): Fatal signal 11 (SIGSEGV) at 0x0000002c (code=1) 
... many more ... 
01-29 16:00:48.367 D/Zygote ( 116): Process 3033 terminated by signal (11) 

당신은 치명적인 신호가 수신 된 후 Zygote의 프로세스 종료를보고하는 것이 거의 10 초 걸렸다 것을 볼 수 있습니다. 귀하의 마일리지는 다를 수 있습니다.

SIGSEGV의 실제 이유는 타사 C 라이브러리, Java 또는 C 라이브러리 호출 방식 일 수 있습니다. 예를 들어, Java 예외가 발생하는 동안 대부분의 JNI 호출을 수행하는 것은 금지되어 있습니다.

+1

나는 이전에 내 logcat에서 SIGSEGV를보고하지 않았습니다. 스택 추적이 없으면 Java/Android 이외의 오류가 표시되지 않습니까? 전에 어떤 logcat 메시지도없이 애플리케이션이 종료 된 것을 본 적이 없습니다. –

+0

나도 마찬가지입니다.하지만 메시지가 "지평선 뒤로"갔거나 adb에 전달되지 않았을 수 있습니까? 시스템 구성 요소가 너무 많은 로그를 생성하여 일부 내 앱 메시지가 손실되었을 수 있도록 구성된 일부 장치가 있습니다. 어쨌든, 충돌의 원인을 찾기 위해 10 초 또는 그 이상을 되돌아 볼 필요가있는 것이 중요합니다. –

+0

일부 안드로이드 버전은 네이티브 코드가 시그널 핸들러를 사용하지 않고'SA_SIGINFO' 플래그를 없애면 시그널 핸들러 자체가 충돌하고 로그에서 제로 피드백을 얻는 문제가 있습니다. 하나의 플랫폼에서 이것을 수행하는 GLES 쉐이더 컴파일러를 잡았습니다. https://android.googlesource.com/platform/bionic/+/f84bc8d6f6368f1c846124a8168761ee8cc589c0를 참조하십시오. 그게 여기서 일어나는 지 모르겠지만 가능성은 있습니다. – fadden

관련 문제