Gỡ lỗi mã nền tảng

Android Studio for Platform (ASfP) tích hợp tính năng gỡ lỗi nền tảng đa ngôn ngữ xung quanh thẻ Attach (Đính kèm) trong cửa sổ công cụ Debug (Gỡ lỗi):

  • Chọn Run > Attach to Android Process (Chạy > Đính kèm vào quy trình Android) (Control+Alt+A) để đính kèm trình gỡ lỗi Java, trình gỡ lỗi gốc (LLDB đi kèm) hoặc cả hai vào mọi ứng dụng đang chạy hoặc quy trình hệ thống trên một thiết bị thực hoặc thiết bị ảo Cuttlefish.
  • Kiểm tra mọi thư viện dùng chung (.so) đã tải và Mã nhận dạng bản dựng ELF gồm 8 ký tự của thư viện đó trong bảng điều khiển Thư viện trước khi đính kèm – với các biểu tượng dấu đánh dấu xác minh các biểu tượng gỡ lỗi cục bộ khớp trong out/target/product/<device>/symbols.
  • Quản lý các điều kiện tiên quyết của thiết bị trên thanh công cụ: lọc bằng Show system processes (Hiện các quy trình hệ thống), nhấp vào Root Device (Thiết bị bị can thiệp hệ thống) để chạy adb root (hiển thị Device is rooted (Thiết bị đã bị can thiệp vào hệ thống) khi đang hoạt động) và nhấp vào Enable JDWP (Bật JDWP) để bật JDWP trên các bản dựng userdebug.
  • Đặt điểm ngắt có điều kiện và ngoại lệ, xem các giá trị biến nội tuyến trong trình chỉnh sửa, sử dụng Drop Frame và Step Into thông minh, đồng thời kiểm tra các loại C++ và Rust có cấu trúc trong thời gian chạy.

Trước khi sử dụng trình gỡ lỗi, hãy tạo mục tiêu lunch để chỉ mục biểu tượng out/target/product/<device>/symbols/.build-id cục bộ tồn tại, đồng thời flash hoặc chạy một hình ảnh thiết bị phù hợp.

Gỡ lỗi Java và gỡ lỗi kép Java và gốc

Để gỡ lỗi ứng dụng Java hoặc Kotlin, ứng dụng hệ thống (chẳng hạn như com.android.messaging, Cài đặt hoặc SystemUI) hoặc một quy trình gọi vào JNI và mã C++ hoặc Rust, hãy hoàn tất các bước sau:

  1. Đặt các điểm ngắt trong tệp nguồn Java, Kotlin, C, C++ hoặc Rust.
  2. Chọn Run > Attach to Android Process (Chạy > Đính kèm vào quy trình Android) (Ctrl+Alt+A). ASfP sẽ mở một thẻ Attach (Đính kèm) được ghim bên trong cửa sổ công cụ Debug (Gỡ lỗi).
  3. Chọn thiết bị mục tiêu trong trình đơn thả xuống thiết bị. Nếu JDWP chưa được bật trên bản dựng userdebug, hãy nhấp vào Enable JDWP (Bật JDWP) – ASfP sẽ đặt persist.debug.dalvik.vm.jdwp.enabled=1 và khởi động lại thiết bị. Khi hoạt động, nút này sẽ hiển thị Đã bật JDWP với thao tác nhấp chuột phải Tắt JDWP.
  4. Chọn quy trình mục tiêu trong bảng (các quy trình Java và ART sẽ hiển thị biểu tượng tách cà phê).
  5. Ở cuối thẻ Attach (Đính kèm), hãy chọn Java debugger (Trình gỡ lỗi Java), Native debugger (Trình gỡ lỗi gốc) hoặc cả hai. Việc chọn cả hai sẽ mở hai thẻ được liên kết trong cửa sổ công cụ Gỡ lỗi: <process> (<pid>) cho LLDB tích hợp và <process> (<pid>)-jdwp cho Java. Vòng đời của hai phiên này gắn liền với nhau, vì vậy, việc dừng một phiên sẽ dừng cả hai.
  6. Nhấp vào Đính kèm và tương tác với ứng dụng trên thiết bị để đạt được các điểm ngắt.

Hai thẻ gỡ lỗi Java và gỡ lỗi gốc được liên kết cùng với thẻ Đính kèm

Gỡ lỗi quy trình hệ thống (C và C++) và xác minh biểu tượng

Để gỡ lỗi các trình nền hệ thống, HAL hoặc dịch vụ hệ thống (chẳng hạn như android.hardware.bluetooth-service.cuttlefish, surfaceflinger hoặc audioserver), hãy hoàn tất các bước sau:

  1. Mở Run > Attach to Android Process (Chạy > Đính kèm vào quy trình Android) (Control+Alt+A). Nếu thanh công cụ hiển thị Root Device (Thiết bị đã can thiệp vào hệ thống), hãy nhấp vào đó để ASfP chạy adb root và hiển thị Device is rooted (Thiết bị đã can thiệp vào hệ thống).
  2. Chọn Show system processes (Hiện các quy trình hệ thống) trong thanh công cụ trên cùng và lọc quy trình mục tiêu.
  3. Xác minh các biểu tượng gỡ lỗi cục bộ trong bảng điều khiển Thư viện: Khi bạn chọn một quy trình, bảng Thư viện sẽ được điền sẵn mọi thư viện dùng chung ELF (.so) được tải trong quy trình và 8 ký tự thập lục phân đầu tiên của Mã bản dựng ELF. ASfP so khớp từng Mã bản dựng với out/target/product/<device>/symbols (bạn phải dùng symbols/.build-id để phân giải các thư viện bên trong APEX):
    • Các thư viện đã xác minh sẽ có biểu tượng dấu đánh dấu. Trỏ vào bất kỳ hàng nào đã phân giải để xem trước đường dẫn biểu tượng .debug cục bộ đầy đủ của hàng đó.
    • Các thư viện chưa được giải quyết mà không có biểu tượng cục bộ phù hợp sẽ hiển thị biểu tượng cảnh báo.
  4. Phát hiện quy trình không phải Java: Khi bạn chọn một quy trình C++ hoặc Rust (được đánh dấu bằng biểu tượng hình lục giác C), ASfP sẽ ẩn Trình gỡ lỗi Java và hiển thị Không thể gỡ lỗi Java, không phải là quy trình Java trong khi vẫn giữ trạng thái đã đánh dấu Trình gỡ lỗi gốc.
  5. Đặt điểm ngắt trong tệp nguồn C, C++ hoặc Rust, nhấp vào Đính kèm và kích hoạt đường dẫn mã trên thiết bị.

Thẻ Đính kèm cho thấy bảng Thư viện, Mã nhận dạng bản dựng ELF và dấu kiểm biểu tượng cục bộ

Gỡ lỗi mã Rust

ASfP gỡ lỗi mã nền tảng Rust bằng cùng một trình gỡ lỗi LLDB tích hợp được dùng cho C và C++. Bạn không cần bộ chuyển đổi bên ngoài hoặc thiết lập máy chủ theo cách thủ công: ASfP sử dụng lldb-dap từ chuỗi công cụ đi kèm và tự động tải trình in đẹp Rust từ các bản dựng sẵn AOSP để các loại tiêu chuẩn như String, Vec, HashMap và Option hiển thị các giá trị có cấu trúc trong ngăn Variables (Biến).

Đính kèm vào một quy trình Rust đang chạy trên thiết bị

Làm theo các bước trong phần Gỡ lỗi quy trình hệ thống (C và C++): mở Run > Attach to Android Process (Chạy > Đính kèm vào quy trình Android), xác minh Device is rooted (Thiết bị đã bị can thiệp vào hệ thống) và các biểu tượng cục bộ có dấu kiểm trong bảng điều khiển Libraries (Thư viện), giữ nguyên dấu đánh dấu Native debugger (Trình gỡ lỗi gốc) và nhấp vào Attach (Đính kèm). Các khung ngăn xếp Rust và C hoặc C++ xuất hiện cùng nhau trong cùng một phiên gỡ lỗi.

Gỡ lỗi mô-đun rust_test hoặc rust_test_host

  1. Mở tệp Android.bp khai báo một mục tiêu rust_test hoặc rust_test_host rồi nhấp vào biểu tượng Chạy trong máng xối bên cạnh loại mô-đun.
  2. Chọn Debug '<ModuleName>' (Gỡ lỗi "<ModuleName>"). ASfP sẽ tạo mục tiêu, chạy tệp nhị phân kiểm thử trong LLDB trên máy chủ hoặc thiết bị thông minh, và tạm dừng tại các điểm ngắt Rust.
  3. Để gỡ lỗi một hàm kiểm thử duy nhất hoặc tuỳ chỉnh các lệnh khởi động LLDB, hãy mở Run > Edit Configurations (Chạy > Chỉnh sửa cấu hình), chọn cấu hình Soong Test (Kiểm thử Soong) đã tạo và đặt Method (Phương thức) hoặc mở rộng các lựa chọn Debugger (Trình gỡ lỗi). Để biết thêm thông tin về các lựa chọn cấu hình Soong Test, hãy xem phần Kiểm thử mã nền tảng bằng atest.

Gỡ lỗi mã nền tảng Rust bằng trình trực quan hoá biến có cấu trúc trong ASfP