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

1. Trước khi bắt đầu

Lớp học lập trình này hướng dẫn bạn cách sử dụng trình gỡ lỗi trong Android Studio để kiểm tra điều gì xảy ra với ứng dụng Đổ xúc xắc trong thời gian chạy.

Trình gỡ lỗi là một công cụ thiết yếu cho phép kiểm tra việc thực thi đoạn mã hỗ trợ ứng dụng Android để bạn có thể sửa mọi lỗi trong đó. Trình gỡ lỗi cho phép bạn chỉ định các điểm tạm ngưng thực thi mã và tương tác theo cách thủ công với các biến, phương thức cũng như các khía cạnh khác của mã.

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

Kiến thức bạn sẽ học được

  • Cách đính kèm trình gỡ lỗi vào một ứng dụng Android.
  • Cách chạy ứng dụng có đính kèm trình gỡ lỗi.
  • Cách sử dụng một số tính năng cơ bản của trình gỡ lỗi.
  • Mục đích sử dụng của trình gỡ lỗi.

Bạn cần có

  • Máy tính đã cài đặt Android Studio
  • Đoạn mã giải pháp cho ứng dụng Đổ xúc xắc trong Compose

2. Xem video tập lập trình (Không bắt buộc)

Nếu bạn muốn xem một trong những người hướng dẫn của khoá học hoàn thành lớp học lập trình, hãy phát video bên dưới.

Bạn nên mở rộng video ra toàn màn hình (bằng biểu tượng Biểu tượng này hiển thị 4 góc trên một hình vuông được làm nổi bật, để biểu thị chế độ toàn màn hình. ở góc dưới bên phải của video). Nhờ đó, bạn có thể thấy rõ các đoạn mã và Android Studio hơn.

Bước này là bước không bắt buộc. Bạn cũng có thể bỏ qua video này và bắt đầu tham gia lớp học lập trình ngay.

3. Lấy mã khởi đầu

Để bắt đầu, hãy tải mã xuống:

Ngoài ra, bạn còn có thể sao chép kho lưu trữ GitHub cho mã:

$ git clone https://github.com/google-developer-training/basic-android-kotlin-compose-training-dice-roller.git
$ cd basic-android-kotlin-compose-training-dice-roller

Bạn có thể duyệt xem mã này trong Kho lưu trữ GitHub.

4. Chạy trình gỡ lỗi

Có 2 cách để chạy trình gỡ lỗi cùng ứng dụng:

  • Đính kèm trình gỡ lỗi vào một quy trình của ứng dụng hiện có chạy trên thiết bị hoặc trình mô phỏng.
  • Chạy ứng dụng bằng trình gỡ lỗi.

Về cơ bản, cả hai cách đều thực hiện cùng một việc. Khi đã quen với cả hai cách trên, bạn có thể chọn một phương thức mình muốn hoặc cần.

Đính kèm trình gỡ lỗi vào một quy trình của ứng dụng

Nếu ứng dụng đang chạy, bạn có thể đính kèm trình gỡ lỗi vào ứng dụng đó.

Để đính kèm trình gỡ lỗi vào một quy trình của ứng dụng, hãy làm theo các bước sau:

  1. Nhấp vào 5e037ad7aaa36799.png Run ‘app' (Chạy 'ứng dụng').

Nhấp vào nút chạy ứng dụng để khởi chạy nó

  1. Sau khi ứng dụng chạy trên một thiết bị hoặc trình mô phỏng, hãy nhấp vào b53445df2e1bec63.png Attach Debugger to Android Process (Đính kèm trình gỡ lỗi quy trình của Android).

đính kèm trình gỡ lỗi vào ứng dụng đang chạy

Hộp thoại Choose Process (Chọn quy trình) sẽ mở ra. Tại đây, bạn có thể chọn quy trình mà mình muốn đính kèm với trình gỡ lỗi.

  1. Chọn com.example.diceroller rồi nhấp vào OK.

Chọn quy trình cần đính kèm trình gỡ lỗi

Ngăn Debug (Gỡ lỗi) xuất hiện ở cuối Android Studio với thông báo cho biết trình gỡ lỗi được đính kèm vào thiết bị mục tiêu hoặc trình mô phỏng.

Trình gỡ lỗi được kết nối với quy trình đang chạy

Bạn đã đính kèm trình gỡ lỗi vào ứng dụng của mình! Đừng lo lắng về tác động của việc đó hay bạn có thể làm gì với trình gỡ lỗi vì lớp học lập trình này sẽ giải thích tất cả những điều đó trong phần sau. Tiếp theo, bạn sẽ tìm hiểu cách chạy một ứng dụng có đính kèm trình gỡ lỗi.

Chạy ứng dụng bằng trình gỡ lỗi

Nếu muốn sử dụng trình gỡ lỗi ngay từ đầu, bạn có thể tiết kiệm thời gian bằng cách chạy ứng dụng bằng trình gỡ lỗi. Hơn nữa, nếu bạn muốn gỡ lỗi một đoạn mã chỉ chạy vào lúc ứng dụng khởi chạy, bạn cần chạy ứng dụng khi đã đính kèm trình gỡ lỗi.

Để chạy ứng dụng bằng trình gỡ lỗi, hãy làm theo các bước sau:

  1. Trong ngăn Debug (Gỡ lỗi), hãy nhấp vào 930a4556994d2c41.png Stop ‘Android Debugger' (Dừng 'Gỡ lỗi Android'), sau đó đóng ứng dụng trên thiết bị hoặc trình mô phỏng.

Dừng trình gỡ lỗi Android

  1. Nhấp vào a4737e06791f5bbf.png Debug ‘app' (Gỡ lỗi 'ứng dụng').

Chạy ứng dụng có đính kèm trình gỡ lỗi

Ngăn Debug (Gỡ lỗi) xuất hiện ở cuối Android Studio với một số dữ liệu đầu ra từ bảng điều khiển.

ngăn gỡ lỗi

Giờ bạn đã biết cách khởi chạy trình gỡ lỗi! Tiếp theo, bạn sẽ tìm hiểu cách sử dụng chúng.

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

Ngăn gỡ lỗi

Bạn có thể thấy có khá nhiều nút ở đầu ngăn Debug, nhưng các nút này hiện không có nhiều tác dụng và hầu hết đều có màu xám và không thể nhấp vào. Phần này đề cập đến các tính năng thường dùng trong trình gỡ lỗi. Lớp học lập trình này giải thích về các nút khác khi cần sử dụng chúng.

Khi trình gỡ lỗi khởi chạy lần đầu, bạn sẽ thấy một số nút trong ngăn Debug. Ở đầu ngăn Debug, bạn sẽ thấy các nút Debugger (Trình gỡ lỗi) và Console (Bảng điều khiển).

Bảng điều khiển và điều khiển trình gỡ lỗi

Nút Console (Bảng điều khiển) hiển thị đầu ra logcat của ứng dụng. Nếu đoạn mã của bạn có một câu lệnh nhật ký, thì kết quả sẽ hiển thị khi câu lệnh đó thực thi.

Nút Debugger (Trình gỡ lỗi) hiển thị 3 ngăn riêng biệt, hiện các ngăn này đang trống vì bạn không sử dụng trình gỡ lỗi:

  1. Khung
  2. Biến
  3. Mức hao tổn

Ngăn trình gỡ lỗi bao gồm 3 phần

Sử dụng các tính năng phổ biến của trình gỡ lỗi

Đặt điểm ngắt

Một trong những tính năng chính của trình gỡ lỗi là cho phép bạn dừng thực thi trên dòng mã cụ thể bằng một điểm ngắt.

Để thiết lập điểm ngắt trong Android Studio, bạn cần chuyển đến một dòng mã cụ thể, sau đó nhấp vào rãnh bên cạnh số dòng. Nếu cần gỡ bỏ một điểm ngắt, hãy nhấp vào điểm ngắt đó để xóa nó đi.

  • Để thử, hãy đặt một điểm ngắt nơi biến imageResource được đặt.

Thêm và xoá điểm ngắt

Sử dụng nút Resume Program (Tiếp tục chương trình)

Trong phần cuối, bạn đã đặt một điểm ngắt nơi biến imageResource được đặt. Điểm ngắt này khiến quá trình thực thi bị tạm ngưng theo hướng dẫn. Khi trình gỡ lỗi tạm ngưng quá trình thực thi mã, bạn sẽ có thể cần phải thao tác để tiếp tục chạy ứng dụng. Cách nhanh nhất để thực hiện việc này là sử dụng nút Resume Program (Tiếp tục chương trình).

Để tiếp tục lập trình, vui lòng làm theo các bước sau:

  1. Nhấp vào a4737e06791f5bbf.png Debug ‘app' (Gỡ lỗi 'ứng dụng'). Bạn sẽ thấy một số hình ảnh như sau sau khi ứng dụng khởi chạy:

fa27673a8e804aaf.png

Trước khi bạn tiếp tục chương trình, chúng tôi cần giải thích một số nội dung xuất hiện trên màn hình khi trình gỡ lỗi tạm ngưng thực thi:

  • Nhiều nút trong ngăn Debug giờ đã có thể nhấp vào được.
  • Ngăn Frames (Khung) hiển thị nhiều thông tin, trong đó có tham chiếu được đánh dấu đến dòng đã đặt điểm ngắt.
  • Ngăn Variables (Biến) hiển thị một số mục, nhưng ứng dụng này không có nhiều biến nên hiện không có nhiều thông tin liên quan đến phạm vi của lớp học lập trình này. Tuy nhiên, khả năng kiểm tra biến là một tính năng thiết yếu của trình gỡ lỗi do tính năng này cung cấp thông tin chi tiết về những gì xảy ra với đoạn mã trong thời gian chạy. Lớp học lập trình này sẽ đi sâu hơn về cách kiểm tra biến trong những phần sau.

Nếu xem ứng dụng trên thiết bị hoặc trình mô phỏng, bạn có thể thấy màn hình trống vì ứng dụng bị tạm ngưng tại một dòng mã. Cụ thể hơn, quá trình thực thi đã dừng tại điểm ngắt và giao diện người dùng chưa kết xuất được.

Lưu ý rằng không phải lúc nào ứng dụng dừng lại ngay chỉ vì bạn đã đặt một điểm ngắt. Điều này còn tùy thuộc vào vị trí của điểm ngắt trong đoạn mã. Trong trường hợp này, bạn đã đặt điểm ngắt trên một dòng lệnh được thực thi khi ứng dụng khởi chạy.

Điều quan trọng cần nhớ là ứng dụng chỉ tạm ngưng tại điểm ngắt khi cố thực thi dòng đã đặt điểm ngắt đó. Có nhiều cách để tiếp tục chạy trình gỡ lỗi, nhưng hiện tại bạn nên dùng nút Resume Program (Tiếp tục chương trình).

  1. Nhấp vào f4e16fbb7cdb8b2f.png Resume Program.

Nút tiếp tục

Hiện tại, bạn sẽ thấy hình ảnh tương tự như sau:

Ngăn Debugger (trình gỡ lỗi) khi ứng dụng đang chạy

Phần lớn thông tin sẽ biến mất và các nút lại trở nên không thể nhấp được. Ứng dụng cũng xuất hiện như bình thường trên thiết bị hoặc trình mô phỏng của bạn. Lý do là vì mã không còn bị tạm ngưng tại điểm ngắt và ứng dụng đang ở trạng thái chạy bình thường. Trình gỡ lỗi được đính kèm nhưng không tác động nhiều cho đến khi nó cố gắng thực thi một dòng mã có tập hợp điểm ngắt. Giữ nguyên vị trí điểm ngắt này vì nó hữu ích trong các ví dụ sau.

Sử dụng nút Bước vào

Dùng nút Bước vào của trình gỡ lỗi để tiện cho việc tìm hiểu sâu hơn về mã trong thời gian chạy. Nếu có hướng dẫn thực hiện lệnh gọi đến một phương thức hoặc một đoạn mã khác, nút Step Into (Bước vào) cho phép bạn nhập mã mà không cần phải di chuyển đến đó theo cách thủ công trước khi khởi chạy trình gỡ lỗi để đặt điểm ngắt.

Để sử dụng nút Bước vào, vui lòng làm theo các bước sau:

  1. Tạo điểm ngắt ở nội dung hàm lambda setContent trong hàm onCreate() của lớp MainActivity, trong đó hàm DiceRollerApp() được gọi.

Đã thêm điểm ngắt trên dòng 44

  1. Nhấp vào a4737e06791f5bbf.png Chạy 'ứng dụng' để chạy lại ứng dụng bằng trình gỡ lỗi. Việc thực thi sẽ tạm ngưng trên dòng mà hàm DiceRollerApp() được gọi.
  2. Nhấp vào bước vào Bước vào.

Nút Bước vào

Hiện tại, dòng 52 được làm nổi bật và ngăn Khung trong ngăn Gỡ lỗi cho biết mã bị tạm ngưng trên dòng 52.

ứng dụng tạm ngưng trên dòng 52

Nếu mở rộng ngăn Khung, bạn sẽ thấy dòng sau dòng được đánh dấu bắt đầu bằng invoke:, theo sau là số dòng, là số 44 như trong hình trước. Được gọi là ngăn xếp lệnh gọi. Về cơ bản, nó cho thấy chuỗi lệnh gọi dẫn đến việc thực thi mã cho dòng hiện tại. Trong trường hợp này, dòng 44 lưu giữ lệnh để gọi hàm DiceRollerApp().

Khi bạn nhấp vào nút Bước vào tại thời điểm trình gỡ lỗi dừng ở điểm ngắt được đặt trên lệnh gọi hàm đó, trình gỡ lỗi đã bước vào hàm đó, dẫn đến việc thực thi dòng 52 nơi khai báo hàm. Dòng được đánh dấu cho biết vị trí tạm ngưng thực thi. Nếu các dòng sau dòng được đánh dấu có số dòng được liên kết với chúng thì đó là chỉ báo của đường dẫn thực thi. Trong trường hợp cụ thể này, trình gỡ lỗi cho biết lệnh trên dòng 44 đã đưa bạn đến dòng 52.

  1. Nhấp vào edb3c56acaffc23e.png Tiếp tục chương trình.

Thao tác này sẽ đưa bạn đến điểm ngắt đã đặt ban đầu. Bạn có thể đã hiểu thêm một chút về những gì bạn thấy khi ngừng thực thi trong ví dụ đầu tiên. Đây cũng là hình ảnh từ bước thứ 6 của phần Tiếp tục chương trình:

nhấp vào resume để tiếp tục

Trong ngăn xếp lệnh gọi, bạn có thể thấy hàm DiceWithButtonAndImage() bị tạm ngưng trên dòng 63 và hàm được gọi từ dòng 53 trong hàm DiceRollerApp() được gọi trên dòng 44. Tính năng ngăn xếp lệnh gọi có thể giúp bạn hiểu về đường dẫn thực thi. Điều này rất hữu ích khi một hàm được gọi từ nhiều vị trí trong ứng dụng.

Nút Bước vào quy định cách để nhập hàm và tạm ngưng thực thi mà không đặt điểm ngắt trong chính hàm đó. Trong trường hợp này, bạn cần đặt một điểm ngắt trên lệnh gọi đến hàm DiceRollerApp(). Khi bạn nhấp vào nút Bước vào, quá trình thực thi sẽ tạm ngưng trong hàm DiceRollerApp().

Dice Roller là một ứng dụng khá nhỏ vì không có nhiều tệp, lớp hoặc chức năng. Khi bạn làm việc với các ứng dụng lớn hơn, tính năng Step Into (Bước vào) của trình gỡ lỗi sẽ hữu ích hơn vì nó cho phép bạn tự xem chi tiết mà không cần điều hướng mã.

Sử dụng nút Bước qua

Nút Bước qua chỉ ra cách khác để bạn có thể thực hiện duyệt qua mã ứng dụng của mình trong thời gian chạy. Nó di chuyển quá trình thực thi sang dòng mã tiếp theo và chuyển tiếp trình gỡ lỗi.

Để sử dụng nút Bước qua, hãy làm theo các bước sau:

  • Nhấp vào 311eb654b5f218fd.png Bước qua.

Nút Bước qua trong ngăn gỡ lỗi

Giờ đây, bạn có thể thấy trình gỡ lỗi đã tạm ngưng mã thực thi trên dòng tiếp theo, đó là dòng 53. Bạn có thể tiếp tục thao tác liên tiếp bước qua từng dòng.

tạm ngưng mã trên dòng 53

Sử dụng nút Rời khỏi

Nút Rời khỏi có tính năng ngược lại với nút Bước vào. Thay vì xem chi tiết ngăn xếp cuộc gọi, nút Rời khỏi sẽ chuyển lên ngăn xếp cuộc gọi.

Để sử dụng nút Rời khỏi, hãy thực hiện theo các bước sau:

  1. Nhấp vào 496d9a62300a4d97.png Rời khỏi.

Bạn có đoán được lập trình này sẽ bị tạm ngưng ở dòng nào không?

Nút Rời khỏi trong ngăn gỡ lỗi

  1. Lưu ý trình gỡ lỗi đã rời khỏi hàm DiceRollerApp() và chuyển sang dòng tiếp theo sau khi hàm thực thi trên dòng 45. Rời khỏi nhưng không trở về dòng 44 vì dòng đó đã được thực thi. Do đó, bước rời khỏi này sẽ đưa bạn đến dòng 45.

Tiếp tục rời khỏi dòng 45

Nút Rời khỏi là công cụ hữu ích khi bạn thấy mình đi quá sâu trong một ngăn xếp lệnh gọi phương thức. Tính năng này cho phép bạn xử lý ngăn xếp lệnh gọi mà không cần duyệt toàn bộ mã cho từng phương thức mà bạn đã bước vào.

Kiểm tra các biến

Lớp học lập trình trước đó đã có đoạn mô tả ngắn gọn về ngăn Biến, nội dung giải thích chi tiết hơn về cách kiểm tra các biến hiển thị trong ngăn để giúp bạn khắc phục các sự cố gỡ lỗi trong ứng dụng của mình.

Để kiểm tra các biến, hãy làm theo các bước sau:

  1. Nhấp vào điểm ngắt để xóa điểm đó khỏi vị trí gọi hàm DiceRollerApp(), nhưng để lại điểm ngắt đã đặt biến imageResource.
  2. Nhấp vào a4737e06791f5bbf.png Gỡ lỗi 'ứng dụng'. Bạn sẽ thấy biến result$delegateMutableState có giá trị là 1. Nguyên nhân là khi biến được xác định, hệ thống sẽ tạo bản sao bằng mutableStateOf 1. MutableState có nghĩa là biến kết quả chứa trạng thái có thể thay đổi.

ee70fcf0cc18f4d7.png

  1. Nhấp vào edb3c56acaffc23e.png Tiếp tục chương trình.
  2. Trong ứng dụng, hãy nhấp vào Roll (đổ xúc xắc). Mã của bạn sẽ lại tạm ngưng tại điểm ngắt và bạn có thể thấy một giá trị khác cho biến result$delegate.

Trong hình này, trạng thái có thể thay đổi của biến result$delegate chứa giá trị 6. Trạng thái này cho thấy cách bạn có thể kiểm tra các biến trong thời gian chạy bằng trình gỡ lỗi. Trong một ứng dụng có đầy đủ tính năng hơn, giá trị của biến có thể gây ra sự cố. Khi sử dụng trình gỡ lỗi để kiểm tra biến, bạn cần hiểu rõ hơn về thông tin chi tiết của sự cố để có thể sửa lỗi.

d77800dd66311294.png

6. Kết luận

Xin chúc mừng! Bạn đã sử dụng trình gỡ lỗi trong Android Studio.

Tóm tắt

  • Đính kèm trình gỡ lỗi vào một ứng dụng.
  • Khởi chạy một ứng dụng có trình gỡ lỗi đã đính kèm.
  • Làm quen với ngăn trình gỡ lỗi.
  • Đặt một điểm ngắt.
  • Tiếp tục chương trình với trình gỡ lỗi.
  • Sử dụng nút Bước vào.
  • Sử dụng nút Bước qua.
  • Sử dụng nút Rời khỏi.
  • Kiểm tra các biến bằng trình gỡ lỗi.