Gỡ lỗi và chẩn đoán trong phát triển di động: nó là gì, công cụ nào và cách hoạt động

Tác giả: IT Sectr Đã đăng: 2026-04-27 Thời gian đọc: 11 phút

Gỡ lỗi và chẩn đoán chuyên nghiệp các ứng dụng di động là kỹ năng quan trọng cho phát triển di động, cho phép tìm và sửa lỗi trong mã. Theo JetBrains Developer Ecosystem (2024), các nhà phát triển dành tới 30% thời gian làm việc để gỡ lỗi mã. IT Sectr đã phát triển các phương pháp chẩn đoán riêng giúp giảm 40% thời gian tìm lỗi nhờ sử dụng đúng các công cụ gỡ lỗi.

Những điểm chính

  • Debug và Release — hai chế độ xây dựng ứng dụng di động: Debug với ký hiệu gỡ lỗi và Release với tối ưu hóa cho xuất bản.
  • Logcat và Console — công cụ chính để xem nhật ký và chẩn đoán ứng dụng trên Android và iOS.
  • Memory Graph — công cụ trực quan của Xcode để phát hiện rò rỉ bộ nhớ và retain cycles trong ứng dụng iOS.
  • Charles Proxy — proxy HTTP để gỡ lỗi và chẩn đoán lưu lượng mạng giữa ứng dụng di động và máy chủ.
  • Postman và Insomnia — ứng dụng khách API để kiểm tra các yêu cầu REST và GraphQL của backend mà không cần chạy ứng dụng.

Chế độ gỡ lỗi cho phát triển di động: Debug vs Release

Các ứng dụng di động được xây dựng trong hai cấu hình chính: Debug và Release. Bản dựng Debug bao gồm các ký hiệu gỡ lỗi, không tối ưu hóa mã và sử dụng chữ ký tạm thời — cho phép thiết lập breakpoints, kiểm tra biến và thực thi mã từng bước.

Bản dựng Release cho phát triển di động là phiên bản cuối cùng cho App Store và Google Play. Release tối ưu hóa mã, loại bỏ các ký hiệu và nhật ký không cần thiết, ký ứng dụng bằng chứng chỉ sản xuất. Không thể gỡ lỗi trên Release — nếu lỗi chỉ tái hiện trên Release, cần có Crashlytics hoặc các trình báo cáo sự cố khác.

Chiến lược đúng đắn cho ứng dụng di động: Debug để phát triển, Release để kiểm tra trước khi xuất bản. IT Sectr khuyên bạn nên chạy bản dựng Release trên thiết bị kiểm thử 2–3 ngày trước khi phát hành để xác định các vấn đề không xuất hiện ở chế độ Debug (ví dụ: mã bị làm rối hoặc lỗi ProGuard/R8).

Debuggable=false là cài đặt bắt buộc cho Release trong AndroidManifest. iOS Debug và Release khác nhau theo sơ đồ xây dựng trong Xcode — Debug bao gồm Debug executable, Release thì không. iOS cũng có cấu hình TestFlight (với báo cáo sự cố) và App Store.

Công cụ Android: Logcat, Layout Inspector, Database Inspector

Android Studio cung cấp một bộ công cụ hoàn chỉnh để gỡ lỗi và chẩn đoán ứng dụng di động trên nền tảng Android. Logcat là bảng điều khiển nhật ký hệ thống Android, công cụ chính để xem nhật ký, có thể lọc theo cấp độ (Verbose, Debug, Info, Warn, Error), tiến trình và thẻ.

Logcat — Kiến thức cơ bản

Logcat hiển thị nhật ký của tất cả các tiến trình trên thiết bị hoặc trình giả lập. Mỗi nhật ký có mức độ ưu tiên, thẻ và thông báo — sử dụng Log.d(TAG, message) cho thông báo gỡ lỗi, Log.e cho lỗi. Lọc theo thẻ là cách tốt nhất để tìm nhật ký của bạn giữa hàng nghìn thông báo hệ thống.

Ví dụ đầu ra nhật ký trong phát triển di động trên Android:

java
private static final String TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate started");
    try {
        initComponents();
        Log.i(TAG, "Components initialized successfully");
    } catch (Exception e) {
        Log.e(TAG, "Failed to init components", e);
    }
}

Layout Inspector — trình gỡ lỗi giao diện trực quan cho Android, hiển thị hệ thống phân cấp View, thuộc tính của từng phần tử và vị trí của nó trên màn hình. Cho phép kiểm tra các tham số bố cục, đệm, lề, hiển thị và kích thước văn bản trên ứng dụng đang chạy.

Database Inspector — xem và chỉnh sửa cơ sở dữ liệu SQLite trực tiếp trong Android Studio, hiển thị nội dung của tất cả các bảng, cho phép thực thi truy vấn SQL và sửa đổi dữ liệu trong thời gian thực — một công cụ không thể thiếu để gỡ lỗi truy vấn Room và ContentProvider.

Network Inspector — theo dõi tất cả các yêu cầu HTTP của ứng dụng, hiển thị URL, tiêu đề, nội dung yêu cầu và phản hồi, thời gian thực thi và mã trạng thái. Giúp gỡ lỗi API REST, xác minh tính đúng đắn của tuần tự hóa và phát hiện các yêu cầu chậm.

Việc gỡ lỗi và chẩn đoán toàn diện ứng dụng di động trên Android đòi hỏi phải thành thạo tất cả các công cụ được liệt kê. Android Studio kết hợp chúng trong một IDE duy nhất để nâng cao hiệu quả.

Công cụ iOS: Console, Memory Graph, View Hierarchy

Xcode cung cấp một bộ công cụ tương tự để gỡ lỗi và chẩn đoán ứng dụng di động trên iOS. Console là tương đương với Logcat trên iOS, hiển thị nhật ký hệ thống và ứng dụng được nhóm theo danh mục và cấp độ (OSLogType).

Memory Graph — Chẩn đoán rò rỉ bộ nhớ

Memory Graph Debugger là một công cụ trực quan để phát hiện retain cycles và rò rỉ bộ nhớ, hiển thị biểu đồ của tất cả các đối tượng trong bộ nhớ với các tham chiếu của chúng. Các nút màu đỏ cho biết rò rỉ — các đối tượng lẽ ra đã được giải phóng nhưng vẫn còn trong bộ nhớ.

Sử dụng Memory Graph: chạy ứng dụng, nhấp vào nút Debug Memory Graph trong Xcode, chọn một đối tượng và kiểm tra các tham chiếu đến nó. Một retain cycle xuất hiện dưới dạng phụ thuộc vòng tròn: đối tượng A giữ đối tượng B, đối tượng B giữ đối tượng A. Giải pháp là sử dụng tham chiếu weak hoặc unowned trong closures.

View Hierarchy Debugger là tương đương với Layout Inspector trên iOS, hiển thị trực quan hóa 3D của tất cả UIView trên màn hình với hệ thống phân cấp, ràng buộc và thuộc tính của chúng. Cho phép chọn bất kỳ phần tử nào để xem vị trí, màu sắc, kích thước và các ràng buộc bố cục của nó.

Heap Dump là ảnh chụp nhanh toàn bộ bộ nhớ ứng dụng, phân tích giúp tìm các đối tượng không được giải phóng và ước tính tổng mức sử dụng bộ nhớ của mỗi lớp. Trong Xcode, Heap Dump có sẵn thông qua Memory Report trong Debug Navigator.

LLDB là trình gỡ lỗi cấp thấp cho các ứng dụng C, Objective-C và Swift, hỗ trợ breakpoints, watchpoints, kết xuất hợp ngữ và sửa đổi biến động. Lệnh po (print object) trong LLDB xuất ra mô tả của bất kỳ đối tượng nào trong bộ nhớ.

Watchpoint là điểm dừng được kích hoạt khi giá trị của biến thay đổi, hữu ích để theo dõi ai và khi nào thay đổi giá trị trường của đối tượng. Không giống như breakpoint, kích hoạt tại một dòng cụ thể, watchpoint kích hoạt khi có bất kỳ sửa đổi bộ nhớ nào.

Gỡ lỗi và chẩn đoán chuyên nghiệp trên iOS đòi hỏi kinh nghiệm với Xcode và hiểu biết về quản lý bộ nhớ. Apple cung cấp tài liệu đầy đủ cho từng công cụ gỡ lỗi.

Trình gỡ lỗi mạng: Charles Proxy, Proxyman, Wireshark

Các công cụ proxy là cần thiết để chẩn đoán các vấn đề mạng trong ứng dụng di động. Charles Proxy là proxy HTTP phổ biến nhất cho phát triển di động, cho phép chặn, xem và sửa đổi các yêu cầu giữa ứng dụng và máy chủ.

Charles Proxy — Chặn lưu lượng

Charles Proxy hoạt động như người trung gian: bạn cấu hình thiết bị để sử dụng Charles làm proxy (thường là IP máy tính, cổng 8888). Charles hiển thị tất cả các yêu cầu HTTP và HTTPS với khả năng xem tiêu đề, nội dung, cookie và thời gian thực thi. SSL Proxying cho phép giải mã lưu lượng HTTPS để phân tích.

Tính năng của Charles: Breakpoints (tạm dừng yêu cầu để chỉnh sửa), Rewrite (tự động sửa đổi yêu cầu), Map Local (thay thế phản hồi bằng tệp cục bộ). Map Local không thể thiếu để kiểm tra mà không có API thực — bạn trả về JSON đã chuẩn bị trước thay vì phản hồi từ máy chủ.

Proxyman là một thay thế hiện đại cho Charles trên macOS với giao diện sạch hơn, hỗ trợ M1 và M2 tốt hơn và bảo vệ quyền riêng tư. Hỗ trợ các chức năng tương tự: chặn, proxy SSL, chỉnh sửa yêu cầu và tập lệnh để tự động sửa đổi lưu lượng.

Wireshark là trình phân tích lưu lượng chuyên nghiệp để chẩn đoán mạng sâu, phân tích tất cả các lớp OSI: TCP, DNS, bắt tay TLS, ICMP. Được sử dụng để chẩn đoán kết nối chậm, vấn đề DNS và lỗi mạng cấp thấp.

Stetho là một thư viện từ Facebook để gỡ lỗi ứng dụng Android qua trình duyệt Chrome, cho phép xem cơ sở dữ liệu, yêu cầu mạng, View Hierarchy và Shared Preferences qua Chrome DevTools. Flipper là người kế nhiệm của Stetho với hỗ trợ iOS và kiến trúc plugin.

Công cụ API: Postman, Insomnia

Các ứng dụng khách API được sử dụng để gỡ lỗi và chẩn đoán backend của ứng dụng di động mà không cần chạy ứng dụng. Postman là ứng dụng khách API phổ biến nhất với bộ sưu tập, kiểm thử và tự động hóa, cho phép gửi yêu cầu GET, POST, PUT, DELETE và quản lý tiêu đề, cookie và biến môi trường.

Insomnia là một thay thế mã nguồn mở nhẹ cho Postman với giao diện nhanh hơn, hỗ trợ GraphQL tích hợp và tổ chức bộ sưu tập tốt hơn. Hỗ trợ plugin: chủ đề, xuất khẩu, tạo mã bằng nhiều ngôn ngữ khác nhau.

Httpie là ứng dụng khách HTTP dòng lệnh với đầu ra dễ đọc, hiển thị phản hồi JSON có màu sắc, tiêu đề và trạng thái trực tiếp trong terminal. Phù hợp cho kiểm tra API nhanh mà không cần mở ứng dụng GUI.

Ví dụ sử dụng Httpie:

bash
http POST https://api.example.com/v1/users \
    "Authorization: Bearer token123" \
    name="John" email="john@example.com"

IT Sectr khuyên bạn nên kết hợp: Postman để phân tích và tài liệu API + Httpie để kiểm tra nhanh. Nhập bộ sưu tập Postman từ đặc tả Swagger hoặc OpenAPI — điều này đảm bảo các điểm cuối được kiểm thử khớp với tài liệu máy chủ.

Công cụ Nền tảng Loại gỡ lỗi Miễn phí Sử dụng tốt nhất
Logcat Android Ghi nhật ký + Xem nhật ký ứng dụng và hệ thống
Layout Inspector Android UI/View + Kiểm tra hệ thống phân cấp View và thuộc tính
Memory Graph iOS Bộ nhớ + Chẩn đoán rò rỉ bộ nhớ
View Hierarchy iOS UI/View + Trực quan hóa 3D UIView
Charles Proxy iOS/Android Mạng Dùng thử 30 ngày Chặn lưu lượng HTTP/HTTPS
Proxyman iOS/Android Mạng + (giới hạn) Proxy HTTP hiện đại cho macOS
Wireshark Tất cả nền tảng Mạng (sâu) + Phân tích tất cả các lớp OSI
Postman Tất cả nền tảng API + Kiểm thử API REST/GraphQL
Insomnia Tất cả nền tảng API + Thay thế Postman với GraphQL
LLDB iOS/macOS Cấp thấp + Gỡ lỗi từng bước, hợp ngữ

Câu hỏi thường gặp

Debug khác Release thế nào trong phát triển di động?

Bản dựng Debug chứa ký hiệu gỡ lỗi, không tối ưu mã và sử dụng chữ ký tạm thời. Bản dựng Release tối ưu mã, loại bỏ nhật ký, làm rối và ký bằng chứng chỉ sản xuất. Debug được cài qua USB hoặc trình giả lập, Release — qua App Store hoặc Google Play.

Làm thế nào để tìm rò rỉ bộ nhớ trên Android?

Sử dụng Memory Profiler trong Android Studio — nó hiển thị các đối tượng được cấp phát và giải phóng cũng như các sự kiện GC. Thực hiện Heap Dump và phân tích các đối tượng không được giải phóng. Tìm các phiên bản Activity và Fragment còn trong bộ nhớ sau finish(). Sử dụng LeakCanary — thư viện tự động phát hiện rò rỉ.

Làm thế nào để giải mã lưu lượng HTTPS qua Charles Proxy?

Trên máy tính: bật SSL Proxying trong Charles (Proxy → SSL Proxying Settings). Trên thiết bị: cài đặt chứng chỉ CA Charles (chls.pro/ssl) và tin cậy nó trong cài đặt. Trên iOS 13+, bật tin cậy chứng chỉ trong General → About → Certificate Trust Settings. Trên Android 7+, cần cấu hình network_security_config.xml.

Breakpoint và Watchpoint là gì?

Breakpoint dừng thực thi tại một dòng mã cụ thể. Watchpoint dừng thực thi khi giá trị của biến thay đổi. Breakpoint kích hoạt mỗi khi đến dòng đó, watchpoint kích hoạt khi có bất kỳ thay đổi nào trong bộ nhớ được theo dõi. Watchpoint hữu ích để tìm các sửa đổi trường bất ngờ.

Làm thế nào để gỡ lỗi yêu cầu GraphQL?

Sử dụng Apollo DevTools (tiện ích mở rộng trình duyệt) hoặc Insomnia với hỗ trợ GraphQL. Charles và Proxyman chặn các yêu cầu GraphQL như HTTP POST thông thường — bạn có thể xem truy vấn, biến và phản hồi. Để gỡ lỗi chi tiết — Apollo Client Developer Tools.

Tóm tắt

  • Debug và Release — các cấu hình xây dựng khác nhau để phát triển và xuất bản ứng dụng di động
  • Logcat và Console — công cụ cơ bản để xem nhật ký trên Android và iOS
  • Memory Graph và Heap Dump — công cụ trực quan để chẩn đoán rò rỉ bộ nhớ
  • Layout Inspector và View Hierarchy — gỡ lỗi giao diện qua hệ thống phân cấp phần tử và thuộc tính
  • Charles Proxy và Wireshark — chặn lưu lượng và phân tích mạng ở tất cả các lớp OSI
  • Postman và Insomnia — kiểm thử API REST và GraphQL mà không chạy ứng dụng
  • LLDB và Watchpoint — gỡ lỗi cấp thấp với theo dõi thay đổi bộ nhớ

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án