Gỡ lỗi ứng dụng di động hiệu quả: Logcat, DevTools và thói quen tìm lỗi

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Mọi lập trình viên đều dành nhiều thời gian tìm lỗi hơn viết mã mới. Với ứng dụng di động, việc này thêm phức tạp vì có thiết bị, hệ điều hành và mạng tham gia. Bài viết giới thiệu công cụ và quy trình gỡ lỗi để bạn xử lý vấn đề có phương pháp.

Bước đầu: tái hiện và thu hẹp

Trước khi mở công cụ, hãy trả lời: lỗi xảy ra khi nào, có luôn xảy ra không, trên thiết bị hay phiên bản nào? Tái hiện được lỗi ổn định là điều kiện để sửa. Sau đó thu hẹp phạm vi: lỗi nằm ở giao diện, dữ liệu, mạng hay hệ điều hành? Bỏ bớt từng phần để cô lập nguyên nhân.

Đọc kỹ thông báo lỗi và stack trace

Nhiều người bỏ qua dòng lỗi đỏ dài. Hãy đọc từ trên xuống: dòng đầu thường nêu loại lỗi và lý do, các dòng sau chỉ ra chuỗi hàm gọi. Tìm dòng đầu tiên thuộc mã của bạn (không phải của framework), đó thường là nơi cần xem trước.

Logcat cho Android

Logcat là luồng nhật ký của hệ thống Android. Trong Android Studio, bạn lọc theo ứng dụng, mức độ (Verbose, Debug, Info, Warn, Error) hoặc từ khóa. Dùng dòng lệnh cũng được:

adb logcat *:E
adb logcat --pid=$(adb shell pidof -s com.example.app)

Trong code Kotlin, ghi log có thẻ rõ ràng:

Log.d("OrderVM", "Đã tải ${orders.size} đơn hàng")
Log.e("OrderVM", "Tải đơn thất bại", exception)

Đừng ghi dữ liệu nhạy cảm như mật khẩu hay token vào log, vì log có thể bị đọc hoặc gửi đi.

Breakpoint và gỡ lỗi từng bước

Đặt breakpoint để dừng chương trình tại một dòng, rồi xem giá trị biến, ngăn xếp gọi hàm và chạy từng dòng (step over, step into). Cách này tốt hơn nhiều việc in log khắp nơi khi logic phức tạp. Breakpoint có điều kiện giúp chỉ dừng khi một biến có giá trị cụ thể, hữu ích trong vòng lặp dài.

Flutter DevTools

Bộ công cụ này chạy trên trình duyệt, kết nối với ứng dụng đang chạy:

  • Widget Inspector: xem cây widget, khoảng cách, ràng buộc kích thước. Rất hữu ích khi bố cục sai.
  • Performance: phân tích khung hình chậm.
  • Memory: theo dõi bộ nhớ và rò rỉ.
  • Network: xem các yêu cầu mạng và phản hồi.
  • Logging: hiển thị nhật ký.
import 'dart:developer' as developer;

developer.log('Đã nhận phản hồi', name: 'api', error: error);
debugPrint('Giá trị: $value');

Gỡ lỗi mạng

Nhiều lỗi "ứng dụng" thực ra là lỗi dữ liệu mạng. Xem chính xác yêu cầu gửi đi và phản hồi nhận về bằng công cụ như proxy kiểm tra lưu lượng hoặc trình kiểm tra mạng của IDE. Kiểm tra mã trạng thái, tiêu đề, và thân phản hồi có đúng định dạng đã giả định không. Thử gọi API cùng yêu cầu bằng công cụ như Postman để loại trừ phía máy chủ.

Gỡ lỗi trên thiết bị thật

  • Cắm cáp và bật gỡ lỗi USB, hoặc gỡ lỗi không dây khi hỗ trợ.
  • Thử các điều kiện thật: mạng yếu, mất mạng, pin yếu, bộ nhớ đầy.
  • Với iOS, dùng Xcode console và Instruments; với lỗi sập có thể xem nhật ký sập của thiết bị.

Lỗi chỉ có ở bản phát hành

Đôi khi bản debug chạy tốt còn bản release thì lỗi. Nguyên nhân thường là rút gọn mã làm mất lớp được dùng qua phản chiếu, thiếu quyền Internet trong bản release, hoặc khác biệt về thời gian chạy. Hãy thử build bản release trên thiết bị và dùng công cụ báo cáo lỗi sập để xem nhật ký.

Quy trình tìm lỗi có phương pháp

  1. Tái hiện lỗi ổn định.
  2. Đặt giả thuyết về nguyên nhân.
  3. Thu thập bằng chứng: log, breakpoint, kiểm tra mạng.
  4. Kiểm chứng giả thuyết bằng thay đổi nhỏ nhất.
  5. Sửa gốc rễ chứ không chỉ che triệu chứng.
  6. Viết bài kiểm thử hoặc ghi chú để lỗi không quay lại.

Những thói quen hữu ích

  • Thay đổi một thứ mỗi lần; đổi nhiều thứ cùng lúc khiến bạn không biết cái nào có tác dụng.
  • Dùng hệ thống quản lý phiên bản để quay lại bản chạy tốt gần nhất và so sánh thay đổi.
  • Giải thích vấn đề thành lời cho người khác (hoặc một vật vô tri); thường bạn tự thấy lỗi.
  • Nghỉ giải lao khi bí.

Kết luận

Gỡ lỗi giỏi là kỹ năng có thể rèn luyện: đọc thông báo kỹ, dùng đúng công cụ và làm việc có phương pháp. Càng nhiều kinh nghiệm bạn càng đoán đúng nơi cần tìm.

Nếu bạn muốn rèn kỹ năng này qua dự án có hướng dẫn, hãy xem thêm các khóa học tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment