Trang này trình bày chi tiết về cách sử dụng LLDB để phát triển hệ điều hành. Đối với việc phát triển ứng dụng, hãy xem phần Gỡ lỗi ứng dụng. Phần này giải thích cách sử dụng GUI 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 bắt đầu bằng cách đọc Hướng dẫn về LLDB. Nếu bạn là một người dùng GDB chuyên nghiệp, thì bản đồ lệnh GDB đến LLDB sẽ rất hữu ích trong quá trình 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 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 tạo. Xin lưu ý rằng mục bữa trưa phải khớp chính xác với thiết bị mà bạn đang gỡ lỗi. Nếu mục bữa trưa không khớp với thiết bị đính kèm, bạn sẽ gặp lỗi ở dạng:You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
- Kết nối thiết bị với máy.
Để được trợ giúp thêm về cách thiết lập môi trường, hãy xem phần Thiết lập môi trường.
Gỡ lỗi tệp nhị phân
Để gỡ lỗi tệp nhị phân mà bạn đã tạo trên máy, trước tiên, bạn phải sao chép tệp nhị phân đó vào thiết bị rồi 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 các ứ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
với PID. Ví dụ: để gỡ lỗi quy trình bằng PID 1234, hãy chạy lệnh sau 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, khởi động trình 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ủ, định cấu hình trình gỡ lỗi để tìm các biểu tượng và kết nối trình gỡ lỗi với trình gỡ lỗi từ xa.
Gỡ lỗi quá trình khởi động mã gốc
Để gỡ lỗi một quy trình khi quy trình đó bắt đầu, hãy sử dụng lldbclient.py
với tuỳ chọn -r
. Ví dụ: để gỡ lỗi ls /bin
, hãy chạy mã này trên máy chủ lưu trữ:
lldbclient.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 khi khởi động ứng dụng
Đôi khi, bạn muốn gỡ lỗi ứng dụng khi ứng dụng khởi động, chẳng hạn như khi có sự cố và bạn muốn tìm hiểu từng bước trong mã để xem điều gì đã xảy ra trước sự cố.
Tính năng Đính kèm hoạt động trong một số trường hợp, nhưng không thể hoạt động trong một số trường hợp khác vì ứng dụng gặp sự cố trước khi bạn có thể đính kèm. Phương pháp 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 có quyền mở cổng và lldbserver
kế thừa quy định hạn chế đó.
Để gỡ lỗi quá trình khởi động ứng dụng, hãy sử dụng các tuỳ chọn dành 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:
- Chuyển đế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 trong danh sách, sau đó nhấp vào Chờ trình gỡ lỗi.
- Khởi động ứng dụng từ trình 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
- Chờ ứng dụng tải và một hộp thoại sẽ xuất hiện cho bạn biết ứng dụng đang chờ trình gỡ lỗi.
- Đính kèm
lldbserver
/lldbclient
như bình thường, đặt điểm ngắt, sau đó tiếp tục quy trình.
Để cho phép ứng dụng chạy, hãy đính kèm trình gỡ lỗi Giao thức gỡ lỗi qua dây (JDWP) của Java, chẳng hạn 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 các quy trình gặp sự cố
Nếu bạn muốn debuggerd
tạm ngưng các quy trình gặp sự cố để 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 trở xuống
adb shell setprop debug.db.uid 999999
Ở cuối đầu ra sự cố thông thường, debuggerd
cung cấp hướng dẫn sao chép và 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 VS Code
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 người dùng của trình gỡ lỗi VS Code thay vì giao diện dòng lệnh LLDB để kiểm soát và gỡ lỗi mã gốc chạy trên thiết bị.
Trước khi sử dụng VS Code để gỡ lỗi, hãy cài đặt tiện ích CodeLLDB.
Cách gỡ lỗi mã bằng VS Code:
- Đả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ặclldbclient.py
đều có sẵn. - Trong VS Code, hãy nhấn tổ hợp phím Ctrl+Shift+P để chạy một lệnh, tìm Debug: Add Configuration... (Gỡ lỗi: Thêm cấu hình...), sau đó chọn LLDB.
Thao tác này sẽ mở tệp
launch.json
và thêm một đối tượng JSON mới vào danh sách. - Thay thế cấu hình trình gỡ lỗi mới thêm bằng hai dòng nhận xét –
// #lldbclient-generated-begin
và// #lldbclient-generated-end
, để danh sách cấu hình của bạn có dạng như sau:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
lldbclient.py
sử dụng các nhận xét này để phát hiện vị trí ghi cấu hình. Nếu có các mục khác trong danh sách, hãy thêm các dòng chú thích vào cuối sau các cấu hình khác. - Chạy lệnh sau trong dòng lệnh mà bạn đã chạy
envsetup.sh
vàlunch
: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àolaunch.json
và tiếp tục chạy. Đây là điều bình thường; đừng tắt chương trìnhlldbclient.py
. Nếu bạn bỏ qua--vscode-launch-file
, tập lệnh sẽ in đoạn mã JSON mà bạn cần sao chép và dán vàolaunch.json
theo cách thủ công.Cờ
-r
phải là cờ cuối cùng nếu có do cách công cụ phân tích cú pháp cờ. - 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 Bắt đầu gỡ lỗi (F5). Trình gỡ lỗi sẽ kết nối sau từ 10 đến 30 giây.
Nếu cấu hình mới không xuất hiện trong chế độ xem 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
. - Khi bạn gỡ lỗi xong, hãy chuyển đến thiết bị đầu cuối đang chạy
lldbclient.py
rồi nhấn Enter để kết thúc chương trìnhlldbclient.py
. Các lần chạy tập lệnh tiếp theo sẽ tạo cấu hình giữa các nhận xét#lldbclient-generated
và thay thế nội dung cũ, bạn không cần xoá các nội dung đó theo cách thủ công.
Để thêm các thuộc tính tuỳ chỉnh vào cấu hình khởi 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"}' \
...
Build
trước khi gỡ lỗi và
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 thông tin tổng quan về các thuộc tính hiện có trong
tài liệu về VS Code và trong Hướng dẫn sử dụng của
tiện ích CodeLLDB.