Android 소스 디버그 환경 구축(4) - ART 가상 기기의 디버그 문제
3603 단어 android
우선 앱의 프로세스는 지그재그 프로세스 포크에서 나온다는 것을 알아야 한다.zygote 프로세스가 시작되었을 때 ART 가상 기기의 초기화와 시작 작업이 실행되었고, zygote 프로세스는 init 프로세스 fork에서 나온 것입니다.따라서 가상 머신 실행 단계를 디버깅하고 싶을 경우 앱 프로세스를 직접 디버깅하고 ART 초기화와 시작 단계를 디버깅한다.그러면 지그재그 서비스를 닫고 gdbserver detach를 통해 init 프로세스에 디버깅을 한 다음 지그재그 서비스를 시작해야 포크에서 나오는 지그재그 프로세스에 들어갈 수 있습니다.zygote 프로세스에 들어가면 ART 가상 기기의 초기화와 시작 과정을 디버깅할 수 있습니다.다음은 내가 주로 만날 두 가지 문제의 해결 방법을 소개한다. 1.어떻게 컴파일러 최적화를 닫습니까?2.zygote 서비스 프로세스를 어떻게 닫습니까?
하나.ART 메서드의 변수 표시 value optimized out 문제를 해결합니다.
libard.so
최적화는 디버깅을 시작할 때 가상 머신 관련 방법에 들어갈 때 변수
가 표시되는 것을 발견할 수 있습니다. 기본 컴파일링libart.so
이 시작되었을 때 최적화 옵션이 켜져 있기 때문입니다.최적화를 닫기 위해 설정-O0
이 필요하지만 이렇게 설정한 후에는 컴파일할 수 없습니다. 사실 AOSP를 컴파일할 때 libartd.so
라는 공유 라이브러리를 생성했는데 이것은 디버깅을 위한 것입니다.그러나 기본값은 -O2
이고, 우리는 그것을 -O0
로 수정한 후에 다시 컴파일하면 된다. func debugFlags(ctx android.BaseContext) []string {
var cflags []string
opt := envDefault(ctx, "ART_DEBUG_OPT_FLAG", "-O0")// -O2 -O0
cflags = append(cflags, opt)
return cflags
}
$ cd /<your aosp source path># aosp
$ source build/envsetup.sh
$ m -j8
//art/build/art.go
로 전환합니다. 안드로이드 시뮬레이터가 기본적으로 불러오는 것은 libartd.so
이기 때문입니다.우리는 libart.so
로 전환해야 한다.명령을 실행하여 전환$ m use-artd-full
에 대응하는makefilelibartd.so
//art/Android.mk
는 가상 기기의 시작이 느리고 실행도 느려질 수 있습니다. ART 가상 기기를 디버깅할 필요가 없으면 아래 명령을 사용하여 전환할 수 있습니다$ m use-art-full
libartd.so
. 물론 ART 가상기가 아닌 방법도 나타날 수 있다. 그러면 대응하는 모듈을 찾아서 추가
최적화 옵션을 닫아야 한다.2. zygote 서비스 프로세스를 어떻게 닫습니까?
ART 가상 머신 부트 프로세스를 디버깅하거나 zygote 프로세스 부트 프로세스를 디버깅하려고 합니다.수동으로 닫고 지고트 서비스를 켜야 돼요.
$ adb shell stop zygote
$ adb shell start zygote
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.