플랫폼용 Android 스튜디오 (ASfP)는 디버그 도구 창의 연결 탭을 중심으로 다국어 플랫폼 디버깅을 통합합니다.
- Run > Attach to Android Process (Control+Alt+A)를 선택하여 Java 디버거, 네이티브 디버거 (번들 LLDB) 또는 둘 다를 실제 기기나 Cuttlefish 가상 기기에서 실행 중인 앱이나 시스템 프로세스에 연결합니다.
out/target/product/<device>/symbols아래에 일치하는 로컬 디버그 심볼을 확인하는 체크표시 아이콘과 함께 연결하기 전에 로드된 모든 공유 라이브러리 (.so)와 라이브러리 패널의 8자리 ELF 빌드 ID를 검사합니다.- 툴바에서 기기 필수 요건을 관리합니다. 시스템 프로세스 표시로 필터링하고 루트 기기를 클릭하여
adb root를 실행하고 (활성 상태일 때 기기가 루팅됨 표시) JDWP 사용 설정을 클릭하여userdebug빌드에서 JDWP를 사용 설정합니다. - 조건부 및 예외 중단점을 설정하고, 편집기에서 인라인 변수 값을 확인하고, 프레임 드롭 및 스마트 Step Into를 사용하고, 런타임에 구조화된 C++ 및 Rust 유형을 검사합니다.
디버거를 사용하기 전에 로컬 out/target/product/<device>/symbols/.build-id 심볼 색인이 존재하도록 lunch 타겟을 빌드하고 일치하는 기기 이미지를 플래시하거나 실행합니다.
Java 및 이중 Java 및 네이티브 디버깅
Java 또는 Kotlin 애플리케이션, 시스템 앱 (예: com.android.messaging, 설정 또는 SystemUI) 또는 JNI 및 C++ 또는 Rust 코드를 호출하는 프로세스를 디버그하려면 다음 단계를 완료하세요.
- Java, Kotlin, C, C++, Rust 소스 파일에 중단점을 설정합니다.
- Run > Attach to Android Process (Control+Alt+A)를 선택합니다. ASfP는 디버그 도구 창 내에 고정된 첨부 탭을 엽니다.
- 기기 드롭다운 메뉴에서 대상 기기를 선택합니다.
userdebug빌드에서 JDWP가 사용 설정되지 않은 경우 JDWP 사용 설정을 클릭합니다. ASfP가persist.debug.dalvik.vm.jdwp.enabled=1를 설정하고 기기를 재부팅합니다. 활성 상태일 때 버튼에는 JDWP 사용 설정됨이 표시되고 마우스 오른쪽 버튼 클릭 시 JDWP 사용 중지 작업이 표시됩니다. - 표에서 타겟 프로세스를 선택합니다 (Java 및 ART 프로세스에는 커피잔 아이콘이 표시됨).
- 연결 탭 하단에서 Java 디버거, 네이티브 디버거 또는 둘 다를 선택합니다. 둘 다 선택하면 디버그 도구 창에 연결된 탭이 두 개 열립니다.
<process> (<pid>)는 내장 LLDB용이고<process> (<pid>)-jdwp는 Java용입니다. 수명 주기가 서로 연결되어 있으므로 어느 세션이든 중지하면 두 세션이 모두 중지됩니다. - 연결을 클릭하고 기기에서 앱과 상호작용하여 중단점을 적중합니다.

시스템 프로세스 (C 및 C++) 디버깅 및 심볼 확인
시스템 데몬, HAL 또는 시스템 서비스 (예: android.hardware.bluetooth-service.cuttlefish, surfaceflinger, audioserver)를 디버그하려면 다음 단계를 완료하세요.
- 실행 > Android 프로세스에 연결 (Control+Alt+A)을 엽니다. 툴바에 루팅된 기기가 표시되면 이를 클릭하여 ASfP가
adb root를 실행하고 기기가 루팅됨을 표시하도록 합니다. - 상단 툴바에서 시스템 프로세스 표시를 선택하고 타겟 프로세스를 필터링합니다.
- 라이브러리 패널에서 로컬 디버그 심볼 확인: 프로세스를 선택하면 프로세스에 로드된 모든 ELF 공유 라이브러리 (
.so)와 ELF 빌드 ID의 처음 8개 16진수 문자로 라이브러리 표가 채워집니다. ASfP는 각 빌드 ID를out/target/product/<device>/symbols와 대조합니다 (symbols/.build-id는 APEX 내부의 라이브러리를 확인하는 데 필요함).- 인증된 라이브러리에는 체크표시 아이콘이 표시됩니다. 확인된 행을 가리켜 전체 로컬
.debug기호 경로를 미리 봅니다. - 일치하는 로컬 심볼이 없는 해결되지 않은 라이브러리에는 경고 아이콘이 표시됩니다.
- 인증된 라이브러리에는 체크표시 아이콘이 표시됩니다. 확인된 행을 가리켜 전체 로컬
- 비 Java 프로세스 감지: C++ 또는 Rust 프로세스(육각형
C아이콘으로 표시됨)를 선택하면 ASfP는 Java 디버거를 숨기고 Java 디버깅을 사용할 수 없습니다. Java 프로세스가 아닙니다.를 표시하는 동시에 네이티브 디버거를 선택된 상태로 유지합니다. - C, C++ 또는 Rust 소스 파일에서 중단점을 설정하고 연결을 클릭한 다음 기기에서 코드 경로를 트리거합니다.

Rust 코드 디버그
ASfP는 C 및 C++에 사용되는 동일한 내장 LLDB 디버거로 Rust 플랫폼 코드를 디버그합니다. 외부 어댑터나 수동 서버 설정이 필요하지 않습니다. ASfP는 번들로 제공되는 도구 모음에서 lldb-dap를 사용하고 AOSP 미리 빌드에서 Rust pretty-printer를 자동으로 로드하므로 String, Vec, HashMap, Option와 같은 표준 유형이 변수 창에 구조화된 값으로 표시됩니다.
기기에서 실행 중인 Rust 프로세스에 연결
시스템 프로세스 (C 및 C++) 디버깅의 단계를 따릅니다. 실행 > Android 프로세스에 연결을 열고, 기기가 루팅됨 및 로컬 심볼이 라이브러리 패널에 체크표시로 표시되는지 확인하고, 네이티브 디버거를 선택한 상태로 유지하고, 연결을 클릭합니다. Rust 및 C 또는 C++ 스택 프레임이 동일한 디버그 세션에 함께 표시됩니다.
rust_test 또는 rust_test_host 모듈 디버깅
rust_test또는rust_test_host타겟을 선언하는Android.bp파일을 열고 모듈 유형 옆의 여백에서 실행 아이콘을 클릭합니다.- Debug '<ModuleName>'을 선택합니다. ASfP는 타겟을 빌드하고, 호스트 머신이나 연결된 기기의 LLDB에서 테스트 바이너리를 실행하고, Rust 중단점에서 일시중지합니다.
- 단일 테스트 함수를 디버그하거나 LLDB 시작 명령어를 맞춤설정하려면 실행 > 구성 수정을 열고 생성된 Soong 테스트 구성을 선택하고 메서드를 설정하거나 디버거 옵션을 펼칩니다. Soong Test 구성 옵션에 관한 자세한 내용은 atest로 테스트 플랫폼 코드를 참고하세요.
