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

Thông tin chi tiết về trang này sử dụng LLDB cho việc phát triển hệ điều hành. Đối với hoạt động phát triển ứng dụng, hãy xem Gỡ lỗi ứng dụng giải thích cách sử dụng GUI (Giao diện người dùng đồ hoạ) của Android Studio (dựa trên LLDB).

GDB không còn được hỗ trợ hoặc cung cấp nữa. Nếu đang chuyển từ GDB sang LLDB, bạn nên có thể bắt đầu bằng cách đọc Hướng dẫn về LLDB. Nếu bạn là người dùng GDB chuyên nghiệp, Liên kết lệnh GDB sang LLDB rất hữu ích trong khi chuyển đổi.

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

Cách sử dụng trình gỡ lỗi:

  • Thiết lập môi trường tạo bản dựng bằng lệnh envsetup.sh thông thường.
  • Chạy chính lệnh lunch mà bạn đã dùng khi tạo bản dựng. Lưu ý món ăn trưa phải khớp chính xác với thiết bị bạn đang gỡ lỗi. Nếu món ăn trưa không khớp với thiết bị đi kèm, bạn sẽ thấy lỗi biểu mẫu: You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
  • Kết nối thiết bị của bạn với máy.

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

Gỡ lỗi tệp nhị phân

Để gỡ lỗi một tệp nhị phân mà bạn đã tạo trên máy của mình, trước tiên, bạn phải sao chép tệp nhị phân đó vào thiết bị sau đó chạy trình gỡ lỗi. Ví dụ:

adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe

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

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

lldbclient.py -p 1234

Tập lệnh này thiết lập tính năng chuyển tiếp cổng, bắt đầu mã giả lập gỡ lỗi từ xa trên thiết bị, khởi động trình gỡ lỗi trên máy chủ lưu trữ, định cấu hình máy chủ đó để tìm các biểu tượng và kết nối mã đó đến mã gỡ lỗi từ xa mã giả lập.

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

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

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

Sau đó, nhập continue tại 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 ngay khi khởi động, chẳng hạn như khi có sự cố và bạn muốn xem các đoạn mã để xem điều gì đã xảy ra trước 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 vì ứng dụng gặp sự cố trước khi bạn có thể đính kèm. Chiến lược phát hành đĩa đơn Phương thức logwrapper (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 quyền mở cổng và lldbserver kế thừa .

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

  1. Chuyển đến phần Cài đặt > Tuỳ chọn cho nhà phát triển > Chọn ứng dụng gỡ lỗi rồi chọn ứng dụng của bạn khỏi danh sách, sau đó nhấp vào Chờ trình gỡ lỗi.
  2. Khởi động ứng dụng từ trình chạy hoặc bằng cách 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à một hộp thoại xuất hiện cho bạn biết ứng dụng đã đang chờ trình gỡ lỗi.
  4. Đính kèm lldbserver/lldbclient như bình thường, đặt điểm ngắt, sau đó tiếp tục quá trình.

Để ứng dụng chạy được, hãy đính kèm Giao thức dây gỡ lỗi Java (JDWP) như Trình gỡ lỗi Java (jdb):

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

Gỡ lỗi ứng dụng hoặc quy trình gặp sự cố

Nếu bạn muốn debuggerd tạm ngưng các quy trình bị lỗi để bạn có thể đính kèm một trình gỡ lỗi, thiết lập 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 trở xuống
    adb shell setprop debug.db.uid 999999
    

Ở cuối kết quả xảy ra sự cố thông thường, debuggerd sẽ cung cấp tính năng sao chép và dán hướng dẫn trong logcat cho biết cách kết nối trình gỡ lỗi với quy trình gặp sự cố.

Gỡ lỗi bằng mã VS

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

Trước khi sử dụng Mã VS để gỡ lỗi, hãy cài đặt Tiện ích CodeLLDB.

Cách gỡ lỗi mã bằng Mã VS:

  1. Đảm bảo rằng tất cả cấu phần phần mềm bản dựng (chẳng hạn như biểu tượng) cần thiết để chạy lldbclient.py hoặc lldbclient.py đang tồn tại.
  2. Trong VS Code, hãy nhấn tổ hợp phím Ctrl+Shift+P để chạy lệnh, sau đó tìm mục Debug: Add Configuration... (Thêm cấu hình...), rồi chọn LLDB. 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.
  3. Thay thế cấu hình trình gỡ lỗi mới được thêm bằng hai dòng nhận xét – // #lldbclient-generated-begin// #lldbclient-generated-end, vì vậy rằng danh sách cấu hình của bạn trông giống như sau:
    "configurations": [
        // #lldbclient-generated-begin
        // #lldbclient-generated-end
    ]

    lldbclient.py dùng các nhận xét này để phát hiện vị trí ghi cấu hình. Nếu có là các mục khác trong danh sách, hãy thêm các dòng nhận xét vào cuối sau các cấu hình khác.

  4. Chạy lệnh sau đây trong cửa sổ dòng lệnh mà bạn đã chạy envsetup.shlunch:
    lldbclient.py --setup-forwarding vscode-lldb \
          --vscode-launch-file LAUNCH_JSON_PATH \
          ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    lldbclient.py ghi cấu hình đã tạo vào launch.json và tiếp tục chạy. Điều này là bình thường; đừng tắt chương trình lldbclient.py. Nếu bạn bỏ qua --vscode-launch-file, tập lệnh sẽ in đoạn mã JSON mà bạn sẽ cần sao chép và dán vào launch.json theo cách thủ công.

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

  5. Mở thanh bên Run and Debug (Chạy và gỡ lỗi) – cấu hình mới sẽ xuất hiện trong danh sách trình gỡ lỗi. Nhấn vào Start debugging (F5) (Bắt đầu gỡ lỗi). Trình gỡ lỗi sẽ kết nối sau 10 đến 30 giây.

    Nếu cấu hình mới không xuất hiện trong chế độ xem Run and Debug (Chạy và Gỡ lỗi), hãy tải lại cửa sổ để làm mới danh sách trình gỡ lỗi – nhấn tổ hợp phím Ctrl+Shift+P rồi nhập reload window.

  6. Khi bạn gỡ lỗi xong, hãy chuyển đến cửa sổ dòng lệnh đang chạy lldbclient.py và nhấn Enter để kết thúc Chương trình lldbclient.py. Các lần chạy tập lệnh tiếp theo sẽ tạo cấu hình giữa #lldbclient-generated nhận xét và thay thế nội dung cũ, bạn không bạn cần phải loại bỏ chúng theo cách thủ công.

Để thêm thuộc tính tuỳ chỉnh vào cấu hình chạy đã tạo, bạn có thể sử dụng Cờ --vscode-launch-props. Ví dụ:

lldbclient.py --setup-forwarding vscode-lldb \
    --vscode-launch-props \
    '{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
    ...
Các thuộc tính ví dụ sẽ khiến Mã VS chạy tác vụ có tên Build trước khi gỡ lỗi và sẽ thêm một bước khởi chạy gỡ lỗi mới vào các bước do tập lệnh tạo. Bạn có thể tìm thấy tổng quan về các tài sản có sẵn trong tài liệu về Mã VS và trong Hướng dẫn sử dụng của Tiện ích CodeLLDB.