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:
- 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.
- 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
- 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.
- Đí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:
- Đả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
đang tồn tại. - 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. - 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
và// #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. - Chạy lệnh sau đây trong cửa sổ 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. Điều này là 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 sẽ 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ờ được phân tích cú pháp công cụ này. - 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
. - 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ìnhlldbclient.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.