Gỡ lỗi ứng dụng | Android Developers

Android Studio cung cấp trình gỡ lỗi cho phép bạn thực hiện các thao tác sau và nhiều thao tác khác:

Trang này bao gồm hướng dẫn cho các thao tác trình gỡ lỗi cơ bản. Để xem thêm tài liệu, hãy xem thêm phần Tài liệu gỡ lỗi của IntelliJ IDEE.

Trước khi có thể bắt đầu gỡ lỗi, bạn cần chuẩn bị như sau:

Nếu ứng dụng của bạn phụ thuộc vào một mô-đun thư viện mà bạn cũng muốn gỡ lỗi, thì thư viện đó cũng phải được đóng gói với debuggable true để giữ lại các biểu tượng gỡ lỗi. Để đảm bảo rằng các biến thể có thể gỡ lỗi của dự án ứng dụng nhận được biến thể có thể gỡ lỗi của mô-đun thư viện, hãy nhớ phát hành các phiên bản không mặc định của thư viện.

Thuộc tính này cũng áp dụng cho các mô-đun có mã C/C++ . (Thuộc tính jniDebuggable không còn được sử dụng nữa).

Bạn phải sử dụng biến thể bản dựng có debuggable true trong cấu hình bản dựng. Thông thường, bạn có thể chỉ cần chọn biến thể “gỡ lỗi” mặc định có trong mọi dự án Android Studio (mặc dù biến thể này không hiển thị trong tệp build.gradle ). Nhưng nếu bạn xác định các loại bản dựng mới có thể gỡ lỗi được, bạn phải thêm `debuggable true` vào loại bản dựng:

Nếu bạn đang sử dụng trình mô phỏng, thì trình mô phỏng này sẽ bật theo mặc định. Tuy nhiên, đối với một thiết bị đã kết nối, bạn cần phải bật tính năng gỡ lỗi trong các tùy chọn dành cho nhà phát triển thiết bị .

Bạn có thể bắt đầu một phiên gỡ lỗi như sau:

Nếu không, Android Studio sẽ tạo một APK, ký APK bằng một khóa gỡ lỗi, cài đặt APK này trên thiết bị mà bạn đã chọn và chạy APK đó. Nếu bạn thêm mã C và C++ vào dự án của bạn , Android Studio cũng chạy Trình gỡ lỗi LLDB trong Gỡ lỗi để gỡ lỗi mã gốc.

Nếu bạn thấy hộp thoại hỏi xem bạn có muốn “chuyển từ Chạy sang gỡ lỗi” hay không, có nghĩa là ứng dụng của bạn đã chạy trên thiết bị và sẽ khởi động lại để bắt đầu gỡ lỗi. Nếu bạn muốn giữ nguyên phiên bản ứng dụng đang chạy, hãy nhấp vào Hủy gỡ lỗi và thay vào đó, hãy đính kèm trình gỡ lỗi vào một ứng dụng đang chạy .

Nếu ứng dụng của bạn đang chạy trên thiết bị, bạn có thể bắt đầu gỡ lỗi mà không cần
khởi động lại ứng dụng như sau:

Từ trình đơn thả xuống Sử dụng các tùy chọn cài đặt trình gỡ lỗi Android từ , bạn có thể chọn một cấu hình chạy/gỡ lỗi hiện có. (Đối với mã C và C++, tùy chọn này cho phép bạn sử dụng lại các lệnh khởi động LLDB, lệnh đính kèm sau bài viết LLDB và thư mục biểu tượng trong cấu hình hiện có). Nếu bạn chưa có cấu hình chạy/gỡ lỗi, hãy chọn Tạo mới . Lựa chọn này sẽ bật trình đơn thả xuống Loại gỡ lỗi tại đó bạn có thể chọn một loại gỡ lỗi khác . Theo mặc định, Android Studio sử dụng loại gỡ lỗi Tự động để chọn tùy chọn trình gỡ lỗi tốt nhất cho bạn, dựa trên việc dự án của bạn có chứa mã Java hay C/C++ hay không.

Nếu đang sử dụng một trình mô phỏng hoặc thiết bị bị can thiệp hệ thống, bạn có thể chọn Hiển thị tất cả các quy trình để xem tất cả các quy trình.

Lưu ý: Trình gỡ lỗi Android Studio và trình thu thập dữ liệu rác
được tích hợp thoải mái. Máy ảo Android đảm bảo rằng mọi đối tượng
mà trình gỡ lỗi biết được sẽ không thu thập dữ liệu cho đến khi trình gỡ lỗi
ngắt kết nối. Điều này có thể dẫn đến việc tích hợp đối tượng theo thời gian trong khi
trình gỡ lỗi được kết nối. Ví dụ: nếu trình gỡ lỗi thấy một chuỗi đang chạy, thì
đối tượng Thread
được liên kết sẽ không được thu thập rác cho đến khi trình gỡ lỗi ngắt kết nối, ngay cả khi đã kết thúc chuỗi đó.

Vì có nhiều công cụ trình gỡ lỗi cần phải gỡ lỗi mã Java/Kotlin và mã C/C++ nên
trình gỡ lỗi Android Studio cho phép bạn chọn loại trình gỡ lỗi để sử dụng. Theo mặc định, Android Studio
sẽ quyết định trình gỡ lỗi nào cần sử dụng dựa trên ngôn ngữ mà trình phát hiện phát hiện trong dự án (với loại trình gỡ lỗi
Tự động). Tuy nhiên, bạn có thể chọn trình gỡ lỗi theo cách thủ công trong cấu hình gỡ lỗi (nhấp vào Chạy > Chỉnh sửa
cấu hình
) hoặc trong hộp thoại xuất hiện khi bạn nhấp vào Chạy > Đính kèm trình gỡ lỗi vào quy trình
Android
.

Các loại gỡ lỗi có sẵn bao gồm:

Tự động
Chọn loại gỡ lỗi này nếu bạn muốn Android Studio tự động chọn tùy chọn tốt nhất
cho mã bạn đang gỡ lỗi. Ví dụ: nếu bạn có bất kỳ mã C hoặc C++ nào
trong dự án, Android Studio sẽ tự động sử dụng loại
gỡ lỗi Kép. Nếu không, Android Studio sẽ sử dụng loại gỡ lỗi Java.
Java
Chọn loại gỡ lỗi này nếu bạn chỉ muốn gỡ lỗi mã được viết trong Java hoặc Kotlin—trình gỡ lỗi Java
sẽ bỏ qua mọi điểm ngắt hoặc đồng hồ bạn đã đặt trong mã gốc.
Quảng cáo gốc (chỉ sử dụng được với mã C/C++)
Chọn loại gỡ lỗi này nếu bạn chỉ muốn sử dụng LLDB để gỡ lỗi mã của mình. Khi sử dụng
kiểu gỡ lỗi này, bạn sẽ không xem được phiên gỡ lỗi cho trình gỡ lỗi Java. Theo mặc định,
LLDB chỉ kiểm tra mã gốc của bạn và bỏ qua các điểm ngắt trong mã Java. Nếu cũng muốn gỡ lỗi mã Java, bạn nên chuyển sang loại gỡ lỗi Tự động hoặc Kép.

Tính năng gỡ lỗi gốc chỉ hoạt động trên những thiết bị đáp ứng các yêu cầu sau:

  • Thiết bị hỗ trợ run-as.

    Để kiểm tra xem thiết bị có hỗ trợ run-as hay không, hãy chạy lệnh sau trên
    vỏ ADB được kết nối với thiết bị của bạn:

    run-as your-package-name pwd
    

    Thay thế your-package-name bằng tên gói của ứng dụng. Nếu thiết bị
    hỗ trợ run-as, lệnh sẽ trả về mà không có lỗi nào.

  • Thiết bị đã bật ptrace.

    Để kiểm tra xem ptrace đã bật hay chưa, hãy chạy lệnh sau trên vỏ ADB được kết nối với thiết bị của bạn:

    sysctl kernel.yama.ptrace_scope
    

    Nếu bạn bật ptrace, lệnh này sẽ in giá trị 0 hoặc lỗi unknown key. Nếu bạn không bật ptrace, ứng dụng này sẽ in một giá trị không phải là 0.

Kép (chỉ dùng được với mã C/C++)
Chọn loại gỡ lỗi này nếu bạn muốn chuyển đổi giữa gỡ lỗi Java và mã gốc.
Android Studio sẽ đính kèm cả trình gỡ lỗi Java và LLDB vào quy trình
ứng dụng của bạn, một trình gỡ lỗi Java và một trình kích hoạt LLDB để bạn có thể kiểm tra
các điểm ngắt trong cả mã Java và mã gốc mà không cần khởi động lại ứng dụng
hoặc đang thay đổi cấu hình gỡ lỗi của bạn.

Trong hình 2, hãy chú ý hai thẻ ở bên phải của tiêu đề cửa sổ Gỡ lỗi.
Vì ứng dụng có cả mã Java và mã C++, nên một thẻ để gỡ lỗi mã gốc
và thẻ còn lại để gỡ lỗi mã Java, như được chỉ định bằng -robots.

Hình 2. Thẻ để gỡ lỗi mã gốc và thẻ
để gỡ lỗi mã Java

Lưu ý: Nếu đang gỡ lỗi mã gốc được
trình biên dịch tối ưu hóa, bạn có thể nhận được thông báo cảnh báo sau: This function was
compiled with optimizations enabled. Some debugger features may not be
available
.k Khi sử dụng cờ tối ưu hóa, chẳng hạn như -O cờ, trình biên dịch sẽ thực hiện các thay đổi đối với
mã đã biên dịch để giúp mã chạy hiệu quả hơn. Điều này có thể khiến trình gỡ lỗi
báo cáo thông tin không mong muốn hoặc không chính xác vì trình gỡ lỗi khó
liên kết mã đã biên dịch được tối ưu hóa với mã nguồn ban đầu.
Vì lý do này, bạn nên tắt tính năng tối ưu hóa trình biên dịch trong khi gỡ lỗi
mã gốc của bạn.

Sử dụng nhật ký hệ thống

Nhật ký hệ thống hiển thị các thông báo hệ thống trong khi bạn gỡ lỗi ứng dụng. Những thông báo này bao gồm
thông tin từ các ứng dụng chạy trên thiết bị. Nếu bạn muốn sử dụng
nhật ký hệ thống để gỡ lỗi ứng dụng của mình, hãy đảm bảo mã của bạn viết thông điệp nhật ký và in ra dấu vết ngăn xếp
cho các trường hợp ngoại lệ khi ứng dụng của bạn đang trong giai đoạn phát triển.

Viết tin nhắn nhật ký trong mã của bạn

Để viết thông điệp nhật ký trong mã của bạn, hãy sử dụng lớp
Log
. Thông báo nhật ký giúp
bạn hiểu được quy trình thực thi bằng cách thu thập kết quả gỡ lỗi hệ thống trong khi
bạn tương tác với ứng dụng của mình. Thông tin nhật ký có thể cho bạn biết phần nào trong đơn đăng ký của bạn không thành công. Để biết thêm thông tin về cách ghi nhật ký, hãy xem phần Viết và xem nhật ký.

Ví dụ sau cho thấy cách bạn có thể thêm thông điệp nhật ký để xác định xem thông tin trạng thái
trước đó có hiển thị hay không khi hoạt động của bạn bắt đầu:

Kotlin

import android.util.Log
...
private val TAG: String = MyActivity::class.java.simpleName
...
class MyActivity : Activity() {
    ...
    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        if (savedInstanceState != null) {
            Log.d(TAG, "onCreate() Restoring previous state")
            /* restore state */
        } else {
            Log.d(TAG, "onCreate() No saved state available")
            /* initialize app */
        }
    }
}

Java

import android.util.Log;
...
public class MyActivity extends Activity {
    private static final String TAG = MyActivity.class.getSimpleName();
    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
       ...
       if (savedInstanceState != null) {
            Log.d(TAG, "onCreate() Restoring previous state");
            /* restore state */
        } else {
            Log.d(TAG, "onCreate() No saved state available");
            /* initialize app */
        }
    }
}

Trong quá trình phát triển, mã của bạn cũng có thể phát hiện các trường hợp ngoại lệ và ghi dấu vết ngăn xếp
vào nhật ký hệ thống:

Kotlin

fun someOtherMethod() {
    try {
        ...
    } catch (e : SomeException) {
        Log.d(TAG, "someOtherMethod()", e)
    }
}

Java

void someOtherMethod() {
    try {
        ...
    } catch (SomeException e) {
        Log.d(TAG, "someOtherMethod()", e);
    }
}

Lưu ý: Xóa thông báo nhật ký gỡ lỗi và ngăn xếp lệnh gọi dấu vết in khỏi
mã khi bạn sẵn sàng phát hành ứng dụng. Bạn có thể làm việc này bằng cách đặt cờ DEBUG
và đặt thông báo nhật ký gỡ lỗi bên trong câu lệnh có điều kiện.

Xem nhật ký hệ thống

Bạn có thể xem và lọc dữ liệu gỡ lỗi cũng như các thông báo hệ thống khác trong cửa sổ Logcat.
Ví dụ: bạn có thể thấy
các thông báo khi đã thu thập rác hoặc thông báo mà bạn thêm vào ứng dụng của mình bằng
loại Log.

Để sử dụng logcat, hãy bắt đầu gỡ lỗi và chọn thẻ Logcat
trong thanh công cụ ở dưới cùng như hình 3.

Hình 3. Cửa sổ logcat có cài đặt bộ lọc

Để xem nội dung mô tả về logcat và các tùy chọn lọc về logcat, hãy xem phần
Viết và xem nhật ký với logcat.

Làm việc với các điểm ngắt

Android Studio hỗ trợ một số loại điểm ngắt kích hoạt các thao tác gỡ lỗi khác nhau. Loại phổ biến nhất là điểm ngắt dòng
sẽ tạm dừng việc thực thi ứng dụng của bạn trên một dòng mã được chỉ định. Trong khi tạm dừng,
bạn có thể kiểm tra biến, đánh giá biểu thức, sau đó tiếp tục thực thi từng dòng
để xác định nguyên nhân gây ra lỗi thời gian chạy.

Để thêm điểm ngắt dòng, hãy tiến hành như sau:

  1. Tìm dòng mã bạn muốn tạm dừng thực thi, sau đó
    nhấp vào máng xối bên trái dọc theo dòng mã đó hoặc đặt con nháy trên dòng
    và nhấn Control+F8 (trên máy Mac, Command+F8).
  2. Nếu ứng dụng của bạn đang chạy, bạn không cần cập nhật ứng dụng để thêm
    điểm ngắt — chỉ cần nhấp vào Đính kèm trình gỡ lỗi vào quy trình Android
    . Nếu không, hãy bắt đầu gỡ lỗi bằng cách nhấp vào Gỡ lỗi
    .

Hình 3. Một dấu chấm màu đỏ sẽ xuất hiện bên cạnh
dòng khi bạn đặt một điểm ngắt

Khi việc thực thi mã của bạn đến điểm ngắt,
Android Studio sẽ tạm dừng việc thực thi ứng dụng của bạn. Sau đó, bạn có thể
sử dụng các công cụ trong thẻ Gỡ lỗi để xác định trạng thái của ứng dụng:

  • Để kiểm tra cây đối tượng cho một biến, hãy mở rộng cây đối tượng trong chế độ xem Biến. Nếu
    chế độ xem Biến không hiển thị, hãy nhấp vào Khôi phục chế độ xem biến
    .

  • Để đánh giá biểu thức tại điểm thực thi hiện tại, hãy nhấp vào Đánh giá biểu thức
    .

  • Để chuyển đến dòng tiếp theo trong mã (mà không nhập phương thức), hãy nhấp vào Bước
    quá
    .

  • Để chuyển đến dòng đầu tiên trong lệnh gọi phương thức, hãy nhấp vào Bước vào .

  • Để chuyển đến dòng tiếp theo bên ngoài phương thức hiện tại, hãy nhấp vào Xóa .

  • Để tiếp tục chạy ứng dụng như bình thường, hãy nhấp vào Tiếp tục chương trình
    .

Nếu dự án của bạn sử dụng bất kỳ mã gốc nào, theo mặc định, loại gỡ lỗi Tự động
sẽ đính kèm cả trình gỡ lỗi Java và LLDB vào ứng dụng của bạn dưới dạng hai quy trình riêng biệt
để bạn có thể chuyển đổi giữa việc kiểm tra Java và Các điểm ngắt C/C++
mà không khởi động lại ứng dụng hoặc thay đổi các chế độ cài đặt.

Lưu ý: Để Android Studio phát hiện điểm ngắt trong mã C hoặc C++,
bạn cần sử dụng loại gỡ lỗi hỗ trợ LLDB, chẳng hạn như Auto, Native hoặc
Dual. Bạn có thể thay đổi loại gỡ lỗi mà Android Studio sử dụng bằng cách chỉnh sửa cấu hình gỡ lỗi. Để
tìm hiểu thêm về các loại gỡ lỗi khác nhau, hãy đọc phần về cách sử dụng các
loại gỡ lỗi khác.

Khi Android Studio triển khai ứng dụng của bạn trên thiết bị mục tiêu, cửa sổ Gỡ lỗi sẽ
mở ra cùng với một thẻ hoặc chế độ xem phiên gỡ lỗi cho từng quy trình gỡ lỗi, như minh họa
trong hình 4.

Hình 4. Gỡ lỗi mã gốc bằng LLDB

  1. Android Studio chuyển sang thẻ
    <your-module> khi trình gỡ lỗi LLDB gặp phải
    điểm ngắt trong mã C/C++ của bạn. Các ngăn Khung, Biến
    Đồng hồ cũng có sẵn và hoạt động giống như khi bạn
    gỡ lỗi mã Java. Mặc dù ngăn Chuỗi không hiển thị
    trong chế độ xem phiên LLDB, nhưng bạn có thể truy cập vào các quy trình ứng dụng bằng cách sử dụng
    danh sách thả xuống trong ngăn Khung. Bạn có thể tìm hiểu thêm về
    các ngăn này trong mục cách gỡ lỗi khung
    cửa sổ và biến kiểm tra.

    Lưu ý: Trong khi kiểm tra một điểm ngắt trong mã gốc của bạn,
    hệ thống Android sẽ tạm ngưng máy ảo chạy mã byte
    Java của ứng dụng. Điều này có nghĩa là bạn không thể tương tác với trình gỡ lỗi Java
    hoặc truy xuất bất kỳ thông tin trạng thái nào từ phiên gỡ lỗi Java
    trong quá trình kiểm tra điểm ngắt trong mã gốc.

  2. Android Studio chuyển sang thẻ
    <your-module>-robots khi trình gỡ lỗi Java
    gặp một điểm ngắt trong mã Java.
  3. Khi gỡ lỗi bằng LLDB, bạn có thể sử dụng thiết bị đầu cuối LLDB trong
    chế độ xem phiên LLDB để chuyển các tùy chọn dòng lệnh tới LLDB. Nếu có một số lệnh nhất định
    mà bạn muốn LLDB thực thi mỗi khi bắt đầu gỡ lỗi
    ứng dụng, ngay trước hoặc ngay sau khi trình gỡ lỗi đính kèm
    quy trình ứng dụng, bạn có thể thêm các lệnh đó vào cấu hình gỡ lỗi của bạn.

Trong khi gỡ lỗi mã C/C++, bạn cũng có thể đặt các loại điểm ngắt đặc biệt,
gọi là điểm xem, để tạm ngưng quy trình dùng ứng dụng khi ứng dụng đó
tương tác với một khối bộ nhớ cụ thể. Để tìm hiểu thêm, hãy đọc
phần cách thêm điểm xem.

Xem và định cấu hình các điểm ngắt

Để xem tất cả các điểm ngắt và định cấu hình các tùy chọn cài đặt về điểm ngắt, hãy nhấp vào
Xem điểm ngắt

bên trái của cửa sổ Gỡ lỗi. Cửa sổ Điểm ngắt sẽ xuất hiện,
như minh họa trong hình 5.

Hình 5. Cửa sổ Các điểm ngắt liệt kê tất cả các điểm ngắt
hiện tại và có các tùy chọn cài đặt hành vi cho từng điểm ngắt

Cửa sổ Điểm ngắt cho phép bạn bật hoặc tắt từng điểm ngắt từ
danh sách bên trái. Nếu bạn tắt điểm ngắt, Android Studio sẽ không
tạm dừng ứng dụng của bạn khi ứng dụng đó gặp điểm ngắt đó. Chọn một điểm ngắt từ
danh sách để định cấu hình các chế độ cài đặt. Trước tiên, bạn có thể định cấu hình để ngắt điểm ngắt
và yêu cầu hệ thống bật điểm ngắt đó sau khi nhấn vào một điểm ngắt khác.
Bạn cũng có thể định cấu hình xem có nên tắt điểm ngắt sau khi
nhấn hay không. Để đặt điểm ngắt cho bất kỳ trường hợp ngoại lệ nào, hãy chọn Điểm ngắt ngoại lệ trong danh sách các điểm ngắt.

Gỡ lỗi khung cửa sổ

Trong cửa sổ Gỡ lỗi, ngăn Khung cho phép bạn kiểm tra
khung ngăn xếp khiến điểm ngắt hiện tại bị ảnh hưởng. Thao tác này cho phép
bạn thao tác và kiểm tra khung ngăn xếp, cũng như kiểm tra danh sách
các chuỗi trong ứng dụng Android. Để chọn một chuỗi, hãy sử dụng
bộ chọn chuỗi thả xuống và xem khung ngăn xếp của chuỗi đó. Khi bạn nhấp vào các phần tử trong khung,
nguồn đó sẽ mở ra trong trình chỉnh sửa. Bạn cũng có thể tùy chỉnh bản trình bày
chuỗi và xuất khung ngăn xếp như đã thảo luận trong hướng dẫn
Khung.

Kiểm tra các biến

TrongTrình gỡ lỗi cửa sổ, Biến ngăn cho phép bạn
kiểm tra các biến khi hệ thống dừng ứng dụng của bạn trên một điểm ngắt và bạn
chọn một khung từKhung ngăn. Ngăn Biến cũng cho phép bạn
đánh giá các biểu thức đặc biệt bằng cách dùng các phương thức tĩnh và/hoặc
biến có sẵn trong khung đã chọn.

Ngăn Đồng hồ cung cấp chức năng tương tự, ngoại trừ
biểu thức được thêm vào ngăn Đồng hồ giữa các
phiên gỡ lỗi. Bạn nên thêm đồng hồ cho các biến và trường mà bạn thường xuyên truy cập
hoặc cung cấp các trạng thái hữu ích cho
phiên gỡ lỗi hiện tại. Ngăn BiếnĐồng hồ xuất hiện như minh họa trong
hình 5.

Để thêm một biến hoặc biểu thức vào danh sách Đồng hồ, hãy làm theo
các bước sau:

  1. Bắt đầu gỡ lỗi.
  2. Trong ngăn Đồng hồ, hãy nhấp vào biểu tượng Thêm
    .
  3. Trong hộp văn bản xuất hiện, hãy nhập tên của biến hoặc biểu thức
    mà bạn muốn xem rồi nhấn phím Enter.

Để xóa một mục khỏi danh sách Đồng hồ, hãy chọn mục đó rồi
nhấp vào Xóa
.

Bạn có thể sắp xếp lại các thành phần trong danh sách Đồng hồ bằng cách chọn một mục
rồi nhấp vào Mũi tên lên hoặc Mũi tên xuống
.

Hình 6. Ngăn Biến và Đồng hồ trong cửa sổ
Trình gỡ lỗi

Thêm điểm xem

Trong khi gỡ lỗi mã C/C++, bạn có thể đặt các loại điểm ngắt đặc biệt, gọi là
điểm xem, có thể tạm ngưng quá trình xử lý ứng dụng của bạn khi ứng dụng đó
tương tác với một khối bộ nhớ cụ thể. Ví dụ: nếu bạn
đặt hai con trỏ vào một khối bộ nhớ và gán một điểm xem cho bộ nhớ đó, hãy sử dụng
con trỏ để truy cập khối bộ nhớ đó và kích hoạt điểm xem.

Trong Android Studio, bạn có thể tạo điểm xem trong thời gian chạy bằng cách chọn
một biến cụ thể, nhưng LLDB chỉ gán điểm xem video cho khối
bộ nhớ mà hệ thống phân bổ cho biến đó, chứ không phải cho chính biến. Hành động này
khác với việc thêm một biến vào ngăn Đồng hồ, cho phép
bạn quan sát giá trị của một biến nhưng không cho phép bạn tạm ngưng
quy trình ứng dụng khi hệ thống sẽ đọc hoặc thay đổi giá trị của bộ nhớ trong bộ nhớ.

Lưu ý: Khi ứng dụng của bạn thoát khỏi một hàm và hệ thống
xác định các biến cục bộ của ứng dụng đó từ bộ nhớ, thì bạn cần phải gán lại mọi
điểm xem mà bạn đã tạo cho các biến đó.

Để đặt điểm xem, bạn phải đáp ứng các yêu cầu sau:

  • Trình mô phỏng hoặc thiết bị thực mục tiêu của bạn sử dụng CPU x86 hoặc x86_64. Nếu
    thiết bị của bạn sử dụng CPU ARM, thì bạn phải căn chỉnh ranh giới địa chỉ
    của biến trong bộ nhớ thành 4 byte đối với bộ xử lý 32 bit hoặc 8
    byte đối với bộ xử lý 64 bit. Bạn có thể căn chỉnh một biến trong mã gốc bằng cách
    chỉ định __attribute__((aligned(num_bytes))) trong
    quá trình giảm tốc biến, như hiển thị bên dưới:

    // For a 64-bit ARM processor
    int my_counter __attribute__((aligned(8)));
    
  • Bạn đã chỉ định ba điểm xem hoặc ít hơn. Android Studio chỉ
    hỗ trợ tối đa 4 điểm xem trên những thiết bị đích x86 hoặc x86_64. Các
    thiết bị khác có thể hỗ trợ ít điểm xem hơn.

Lưu ý: Khi gỡ lỗi ứng dụng bằng các ABI ARM 32 bit, việc thêm điểm xem hoặc di chuột qua
các biến bên trong mã để điều tra
giá trị của các biến đó có thể gây ra sự cố. Để khắc phục, vui lòng gỡ lỗi bằng cách sử dụng tệp nhị phân ARM,
x86 hoặc x86_64. Vấn đề này sẽ được khắc phục trong bản phát hành Android Studio sắp tới.

Nếu đáp ứng các yêu cầu nêu trên, bạn có thể thêm điểm xem video như sau:

  1. Trong khi ứng dụng của bạn bị tạm ngưng trên một điểm ngắt, hãy chuyển đến ngăn
    Biến trong chế độ xem phiên LLDB của bạn.
  2. Nhấp chuột phải vào một biến chiếm khối bộ nhớ mà bạn muốn
    theo dõi và chọn Thêm điểm xem. Một hộp thoại định cấu hình
    điểm xem của bạn sẽ xuất hiện, như minh họa trong hình 7.

    Hình 7. Thêm một điểm xem vào một biến trong bộ nhớ

  3. Định cấu hình điểm xem với các tùy chọn sau:
    • Bật: Bạn hiện có thể bỏ chọn tùy chọn này nếu muốn Android Studio bỏ qua điểm xem tại thời điểm này. Android
      Studio vẫn lưu điểm xem của bạn để bạn có thể truy cập vào điểm xem này sau
      trong phiên gỡ lỗi.
    • Tạm ngưng: Theo mặc định, hệ thống Android sẽ tạm ngưng quy trình ứng dụng của bạn
      khi truy cập một khối bộ nhớ mà bạn chỉ định cho một điểm xem.
      Bạn có thể bỏ chọn tùy chọn này nếu không muốn sử dụng hành vi này. Khi đó, bạn sẽ
      có thêm các tùy chọn để tùy chỉnh hành vi khi
      hệ thống tương tác với điểm xem của bạn: Ghi nhật ký thông báo vào bảng điều khiển
      Xóa [điểm xem] khi bị nhấn ,
    • Loại truy cập: Chọn xem ứng dụng của bạn có nên kích hoạt
      điểm xem của bạn khi cố gắng Đọc hoặc Ghi vào khối
      bộ nhớ không mà hệ thống phân bổ cho biến. Để kích hoạt điểm xem của bạn
      trên một lượt đọc hoặc ghi, hãy chọn Bất kỳ.
  4. Nhấp vào Xong.

Để xem tất cả các điểm xem của bạn và định cấu hình các tùy chọn cài đặt điểm xem, hãy nhấp vào Xem điểm ngắt

ở phía bên trái của cửa sổ Gỡ lỗi. Hộp thoại
Điểm ngắt xuất hiện, như minh họa trong hình 8.

Hình 8. Hộp thoại Điểm ngắt liệt kê các điểm xem hiện tại
của bạn và bao gồm các tùy chọn cài đặt hành vi cho từng điểm

Sau khi bạn thêm điểm xem quảng cáo, hãy nhấp vào Tiếp tục chương trình

ở phía bên trái của cửa sổ Gỡ lỗi để tiếp tục
xử lý ứng dụng. Theo mặc định, nếu ứng dụng của bạn cố gắng truy cập một khối bộ nhớ mà bạn đã
đặt điểm xem, thì hệ thống Android sẽ tạm ngưng quy trình ứng dụng của bạn và
biểu tượng điểm xem xuất hiện bên cạnh dòng mã ứng dụng của bạn
đã thực thi gần đây nhất, như minh họa trong hình 9.

Hình 9. Android Studio cho biết dòng mã mà
ứng dụng của bạn thực thi ngay trước khi kích hoạt điểm xem

Xem và thay đổi định dạng hiển thị giá trị tài nguyên

Ở chế độ gỡ lỗi, bạn có thể xem các giá trị tài nguyên và chọn một định dạng hiển thị khác cho
các biến trong mã Java. Khi thẻ Biến hiển thị và một khung đã chọn,
hãy làm như sau:

  1. Trong danh sách Biến, hãy nhấp chuột phải vào bất kỳ vị trí nào trên một dòng tài nguyên để hiển thị
    danh sách thả xuống.
  2. Trong danh sách thả xuống, chọn Xem dưới dạng và chọn định dạng bạn muốn sử dụng.

    Các định dạng có sẵn phụ thuộc vào loại dữ liệu của tài nguyên mà bạn chọn.
    Bạn có thể thấy một hoặc nhiều tùy chọn sau đây:

    • Loại: Hiển thị định nghĩa loại.
    • toString: Định dạng chuỗi hiển thị.
    • Đối tượng: Hiển thị định nghĩa đối tượng (bản sao của một loại).
    • Mảng: Hiển thị ở định dạng mảng.
    • Dấu thời gian: Hiển thị ngày và giờ như sau: yyyy-mm-dd hh:mm:ss.
    • Tự động: Android Studio sẽ chọn định dạng phù hợp nhất tùy vào loại dữ liệu.
    • Nhị phân: Hiển thị giá trị nhị phân bằng cách sử dụng số không và số nhị phân.
    • MeasureSpec: Giá trị được chuyển từ đơn vị gốc đến thư mục con đã chọn.
      Xem MeasureSpec.
    • Hex: Hiển thị dưới dạng giá trị thập lục phân.
    • Gốc: Hiển thị dưới dạng giá trị số bằng loại dữ liệu gốc.
    • Số nguyên: Hiển thị một giá trị số thuộc loại
      Integer.

Bạn có thể tạo một định dạng tùy chỉnh (trình kết xuất loại dữ liệu) như sau:

  1. Nhấp chuột phải vào giá trị tài nguyên.
  2. Chọn Xem dưới dạng.
  3. Chọn Tạo. Hộp thoại Trình hiển thị loại dữ liệu Java sẽ hiển thị.
  4. Hãy làm theo hướng dẫn tại
    Trình kết xuất loại dữ liệu Java.