Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Sử dụng Trình gỡ lỗi

Chi tiết trang này sử dụng LLDB hoặc GDB để phát triển hệ điều hành. Để phát triển ứng dụng, hãy xem Gỡ lỗi ứng dụng của bạn , phần này giải thích cách sử dụng Android Studio GUI (dựa trên LLDB).

GDB không được dùng nữa và sẽ sớm bị xóa. Nếu bạn đang chuyển từ GDB sang LLDB, có lẽ bạn nên bắt đầu bằng cách đọc Hướng dẫn về LLDB . Nếu bạn là người dùng GDB thành thạo, bản đồ lệnh GDB sang LLDB rất hữu ích trong khi chuyển đổi.

Điều kiện tiên quyết

Để sử dụng trình gỡ lỗi:

  • Thiết lập môi trường xây dựng bằng lệnh envsetup.sh thông thường.
  • Chạy cùng một lệnh lunch mà bạn đã sử dụng khi xây dựng.

Để được trợ giúp thêm về cách thiết lập môi trường của bạn, hãy xem Thiết lập môi trường .

Gỡ lỗi các ứng dụng hoặc quy trình đang chạy

Để kết nối với ứng dụng đang chạy hoặc daemon gốc, hãy sử dụng gdbclient.py với PID. Ví dụ: để gỡ lỗi quá trình với PID 1234, hãy chạy điều này trên máy chủ:

gdbclient.py -p 1234

Tập lệnh thiết lập chuyển tiếp cổng, bắt đầu sơ khai gỡ lỗi từ xa thích hợp trên thiết bị, khởi động trình gỡ lỗi trên máy chủ, cấu hình nó để tìm ký hiệu và kết nối với sơ khai gỡ lỗi từ xa.

Gỡ lỗi khởi động quy trình gốc

Để gỡ lỗi một quá trình khi nó bắt đầu, hãy sử dụng gdbclient.py với tùy chọn -r . Ví dụ: để gỡ lỗi ls /bin , hãy chạy điều này trên máy chủ:

gdbclient.py -r /system/bin/ls /bin

Sau đó, nhập continue theo lời nhắc của trình gỡ lỗi.

Gỡ lỗi khởi động ứng dụng

Đôi khi bạn muốn gỡ lỗi một ứng dụng khi nó khởi động, chẳng hạn như khi có sự cố và bạn muốn xem qua mã để xem điều gì đã xảy ra trước khi xảy ra sự cố. Đính kèm hoạt động trong một số trường hợp, nhưng trong các trường hợp khác là không thể vì ứng dụng bị treo trước khi bạn có thể đính kèm. Phương pháp logwrapper (được sử dụng cho strace ) không phải lúc nào cũng hoạt động vì ứng dụng có thể không có quyền để mở một cổng và gdbserver kế thừa hạn chế đó.

Để gỡ lỗi khởi động ứng dụng, hãy sử dụng tùy chọn nhà phát triển trong Cài đặt để hướng dẫn ứng dụng đợi trình gỡ lỗi Java đính kèm:

  1. Đi tới Cài đặt> Tùy chọn nhà phát triển> Chọn ứng dụng gỡ lỗi và chọn ứng dụng của bạn từ danh sách, sau đó nhấp vào Chờ trình gỡ lỗi .
  2. Khởi động ứng dụng, từ trình khởi chạy hoặc bằng cách sử dụng dòng lệnh để chạy:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. Chờ ứng dụng tải và hộp thoại xuất hiện cho bạn biết ứng dụng đang đợi trình gỡ lỗi.
  4. Đính kèm gdbserver / gdbclient bình thường, đặt các điểm ngắt, sau đó tiếp tục quá trình.

Để cho phép ứng dụng chạy, hãy đính kèm trình gỡ lỗi Java Debug Wire Protocol (JDWP) chẳng hạn như Java Debugger (jdb):

adb forward tcp:12345 jdwp:XXX  # (Where XXX is the PID
of the debugged process.)
jdb -attach localhost:12345

Gỡ lỗi các ứng dụng hoặc quy trình bị lỗi

Nếu bạn muốn debuggerd tạm dừng các quy trình bị lỗi để bạn có thể đính kèm trình gỡ lỗi, hãy đặt thuộc tính thích hợp:

  • Sau Android 11
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • Android 11 trở xuống
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • Android 6.0 Marshmallow và
    adb shell setprop debug.db.uid 999999
    
    thấp hơn

Ở cuối đầu ra lỗi thông thường, debuggerd cung cấp hướng dẫn sao chép và dán trong logcat cho thấy cách kết nối trình gỡ lỗi với quy trình bị lỗi.

Gỡ lỗi không có ký hiệu

Đối với ARM 32-bit, nếu bạn không có ký hiệu, gdb không thể xác định tập lệnh nào mà nó đang tháo rời (ARM hoặc Thumb). Để chỉ định tập lệnh được chọn làm mặc định khi thiếu thông tin về biểu tượng, hãy đặt thuộc tính sau:

set arm fallback-mode arm  # or thumb

Gỡ lỗi bằng mã VS

LLDB hỗ trợ gỡ lỗi mã nền tảng trên Visual Studio Code . Bạn có thể sử dụng giao diện trình gỡ lỗi VS Code thay vì giao diện LLDB CLI để điều khiển và gỡ lỗi mã gốc đang chạy trên thiết bị.

Trước khi sử dụng Mã VS để gỡ lỗi, hãy cài đặt phần mở rộng CodeLLDB .

Để gỡ lỗi mã bằng VS Code:

  1. Đảm bảo rằng tất cả các tạo tác bản dựng (chẳng hạn như biểu tượng) cần thiết để chạy gdbclient.py hoặc lldbclient.py đều có mặt.
  2. Chạy lệnh sau:
    lldbclient.py --setup-forwarding
          vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    Điều này in ra một đối tượng JSON và lldbclient.py tiếp tục chạy. Điều này được mong đợi; không giết chương trình lldbclient.py .

    Cờ -r phải là cờ cuối cùng nếu nó hiện diện do cách các cờ được phân tích cú pháp bởi công cụ.

  3. Trong tab gỡ lỗi trong Mã VS, chọn thêm cấu hình , sau đó chọn LLDB: Khởi chạy tùy chỉnh . Thao tác này sẽ mở tệp launch.json và thêm đối tượng JSON mới vào danh sách.
  4. Xóa cấu hình trình gỡ lỗi mới được thêm vào.
  5. Sao chép đối tượng JSON được in bởi lldbclient.py và dán nó vào đối tượng bạn vừa xóa. Lưu các thay đổi.
  6. Để tải lại cửa sổ để làm mới danh sách trình gỡ lỗi, hãy nhấn Ctrl + Shift + P và nhập reload window .
  7. Chọn cấu hình trình gỡ lỗi mới và nhấn chạy . Trình gỡ lỗi sẽ kết nối sau 10 đến 30 giây.
  8. Khi bạn gỡ lỗi xong, hãy chuyển đến terminal chạy lldbclient.py và nhấn Enter để kết thúc chương trình lldbclient.py .