2014-01-09 1 views
0

잘못된 메모리 액세스로 인해 응용 프로그램이 지속적인 데이터 중단을 유발하는 문제를 디버그하려고합니다.안드로이드의 불법적 인 메모리 접근 - 누가 어떻게 처리합니까?

다음 쿼리가 있습니다.

  1. 일반적으로 Android (CPU ARM)의 애플리케이션이 잘못된 메모리 액세스에 액세스하는 경우 어떻게됩니까?

    페이지 폴트가 발생하여 데이터 중단이 발생합니다. 그렇지? Android에서 잘못된 메모리 액세스를 처리하는 방법을 간단히 설명 할 수 있습니까?

  2. 불법적 인 메모리 액세스를 만드는 프로세스는 어떻게됩니까? 그것은 다시 시작되었거나 다시 시작 되었습니까? 아니면 살해 되었습니까? 누가 이걸 처리하나요?

가능한 경우 코드에 대한 언급이 필요합니다. 고맙습니다.

+0

이 링크를 확인하십시오. http://www.slideshare.net/info_zybotech/memory-management-in-android-14342396 – dipali

답변

2

Android는 Linux 위에 구축되었습니다. 따라서 귀하의 질문은 실제로 웹에서 포인터가 많이 있어야하는 Linux를 처리하는 방법입니다.

일반적으로 응용 프로그램이 응용 프로그램에 매핑되지 않은 메모리 주소 인 잘못된 메모리 액세스를 실행하면 Linux는 응용 프로그램에 SIGSEGV 신호를 보내고 커널 로그에 유용한 로그를 생성하는 동안 처리하지 않으면 죽이게됩니다 (dmesg , /proc/kmsg).

Android는/data/tombstone 아래에 삭제 표시를 만들고 일부 추가 정보를 Android 로그 버퍼 (adb logcat)에 넣을 수도 있습니다.

일반적으로 Linux에서 프로세스가 종료되면 Linux는 특별한 작업을 수행하지 않지만 몇 가지 추가 단계를 수행하는 응용 프로그램 수명주기 관리를 더 높은 수준으로 수행 할 수 있습니다.

안드로이드는 정상적인 응용 프로그램을위한 ~ "예기치 않은 응용 프로그램 충돌"대화 상자를 만들지 만, 유지되어야하는 서비스 나 응용 프로그램 (예 : 홈 화면)에서는 오류가있는 서비스가 계속 재발생되는 것을 피하기 위해 일부 논리로 다시 시작합니다.

다른 부분, 레이어간에 로직이 분산되어 있으므로이 모든 작업을 수행하는 코드베이스에서 단일 지점을 찾을 수 없습니다.