Gỡ và phân tích lỗi code bằng AI

Lỗi 500 vô lý

Trong bài học trước, chúng ta đã tìm hiểu về việc tạo code hoạt động hiệu quả. Giờ hãy xây dựng trên nền tảng đó. Tháng trước, một lập trình viên đã dành 6 giờ để khắc phục một lỗi. API trả về lỗi 500, nhưng chỉ vào các ngày thứ Ba. Chỉ đối với người dùng ở EU. Chỉ khi họ upload lên các file PDF lớn hơn 2MB.

Cuối cùng, anh ấy đã dán toàn bộ luồng yêu cầu vào Claude và hỏi: "Tại sao lỗi này chỉ xảy ra vào các ngày thứ Ba đối với người dùng EU có file PDF lớn?"

Câu trả lời đến chỉ trong 30 giây: Bộ cân bằng tải của khu vực EU có cấu hình thời gian chờ khác và dịch vụ xử lý PDF có một tác vụ định kỳ chạy mỗi thứ Ba tiêu tốn thêm bộ nhớ, đẩy quá trình xử lý file lớn vượt quá ngưỡng thời gian chờ.

Sáu giờ điều tra, hay 30 giây với ngữ cảnh phù hợp. Đó là những gì bài học này sẽ dạy bạn.

Bộ ba yếu tố cần thiết để gỡ lỗi AI

Mỗi phiên gỡ lỗi AI hiệu quả cần ba điều:

1. Lỗi (điều gì đã diễn ra sai)

📍 Nơi dán: Mở ChatGPT (chat.openai.com), Claude (claude.ai) hoặc Gemini (gemini.google.com) và bắt đầu một cuộc trò chuyện mới.

📋 Cách sao chép prompt này: Nhấp vào bất kỳ đâu bên trong khối màu xám, nhấn Cmd+A rồi Cmd+C (Mac) hoặc Ctrl+A rồi Ctrl+C (Windows). Hoặc sử dụng biểu tượng sao chép xuất hiện.

TypeError: Cannot read properties of undefined (reading 'map')
at UserList.render (UserList.tsx:24)
at renderWithHooks (react-dom.development.js:14985)

✏️ ​​Cách điền thông tin chi tiết của bạn: Thay thế mỗi [] và trình giữ chỗ trong ngoặc bằng thông tin cụ thể từ tình huống thực tế của bạn. Thông tin đầu vào mơ hồ sẽ tạo ra kết quả đầu ra mơ hồ — hãy cụ thể.

👀 Những gì bạn sẽ thấy: Trong vòng vài giây, AI sẽ trả về một phản hồi có cấu trúc dựa vào prompt ở trên. Hãy đọc kỹ và coi đó là bản nháp, không phải câu trả lời cuối cùng.

📌 Nên làm gì với kết quả: Lưu phản hồi vào file Notes. Chọn gợi ý có tác động cao nhất và thực hiện nó trong tuần này — đừng cố gắng làm tất cả cùng một lúc.

⚠️ Nếu kết quả không ổn: Nếu các gợi ý có vẻ chung chung, hãy dán nội dung này: "Hãy cụ thể hơn với ngữ cảnh thực tế của tôi. Bỏ qua những lời khuyên chung chung." Nếu nó bỏ qua các chi tiết quan trọng bạn đã cung cấp, hãy hỏi: "Bạn đã bỏ sót [X] trong ngữ cảnh của tôi — hãy thực hiện lại với điều đó làm ràng buộc chính."

2. Code (nơi xảy ra lỗi)

const UserList = ({ users }: Props) => {
  return (
    <ul>
      {users.map(user => (  // Line 24
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
};

3. Kỳ vọng (điều đáng lẽ phải xảy ra)

Kỳ vọng: Hiển thị danh sách người dùng từ phản hồi API
Thực tế: Gặp lỗi TypeError khi component được mount lần đầu

Nếu thiếu bất kỳ điều nào trong số này, AI sẽ phải đoán. Bao gồm cả ba, nó sẽ chẩn đoán chính xác gần như mọi lúc.

Trong ví dụ của chúng ta, AI sẽ ngay lập tức cho bạn biết: usersundefined khi render lần đầu vì lệnh gọi API chưa hoàn tất. Hoặc thêm trạng thái loading hoặc đặt users mặc định thành một mảng rỗng.

5 mẫu gỡ lỗi hiệu quả

Mẫu 1: Phân tích stack trace

Dán toàn bộ stack trace và yêu cầu chẩn đoán.

Đây là stack trace từ dịch vụ Node.js sản xuất của chúng tôi.
Lỗi xảy ra không thường xuyên, khoảng 5% số yêu cầu.

[toàn bộ stack trace]

Các file code liên quan:
[dán các file được đề cập trong stack trace]

Điều gì gây ra lỗi này và tại sao nó lại xảy ra không thường xuyên?

Trí tuệ nhân tạo (AI) có thể theo dõi đường dẫn thực thi, xác định dòng lệnh bị lỗi và suy luận về các nguyên nhân gây ra lỗi gián đoạn (tình trạng tranh chấp tài nguyên, cạn kiệt tài nguyên, hết thời gian chờ của dịch vụ bên ngoài).

Mẫu 2: Gỡ lỗi "Điều gì đã thay đổi?"

Một thứ hoạt động tốt hôm qua lại bị hỏng hôm nay. Đây là lúc AI tỏa sáng trong việc phân tích sự khác biệt.

Endpoint này hoạt động tốt hôm qua và bị lỗi hôm nay với lỗi xác thực 422. Đây là sự khác biệt giữa các lệnh git
cho thấy tất cả những gì đã thay đổi kể từ hôm qua:

[dán sự khác biệt giữa các lệnh git]

Và đây là lỗi:
[dán lỗi]

Điều gì trong sự khác biệt này có thể gây ra lỗi xác thực này?

AI sẽ quét sự khác biệt để tìm các thay đổi đối với schema xác thực, định nghĩa kiểu, middleware hoặc cấu hình có thể gây ra lỗi.

Mẫu 3: Nâng cấp bằng phương pháp "vịt cao su"

Kỹ thuật "vịt cao su" kinh điển - giải thích vấn đề của bạn bằng lời nói - thậm chí còn hiệu quả hơn với AI. Hãy viết ra vấn đề của bạn như thể đang giải thích cho một đồng nghiệp:

Tôi đang cố gắng hiểu tại sao các kết nối WebSocket của chúng tôi
bị ngắt sau đúng 60 giây không hoạt động.

Đây là những gì tôi biết:
- WebSocket server được cấu hình thời gian chờ 120 giây
- Nginx nằm phía trước nó
- Client gửi ping mỗi 30 giây
- Nhưng kết nối vẫn bị ngắt ở mốc 60 giây

Đây là cấu hình Nginx của tôi:
[dán cấu hình]

Và cấu hình WebSocket server:
[dán cấu hình]

Tôi đang thiếu điều gì?

Thông thường, chỉ cần viết ra điều này sẽ giúp bạn hiểu ra vấn đề. Nhưng khi không, AI có thể sẽ phát hiện ra rằng proxy_read_timeout của Nginx được đặt thành 60 giây, ghi đè lên thời gian chờ của WebSocket server.

Mẫu 4: Tái hiện rồi sửa lỗi

Khi bạn không thể tái hiện lỗi, hãy mô tả các triệu chứng và yêu cầu AI giúp tạo ra bản tái hiện:

Người dùng báo cáo rằng việc sắp xếp bảng dữ liệu theo cột "ngày"
đôi khi hiển thị thứ tự không chính xác. Tôi không thể tái hiện
lỗi này trên máy cục bộ.

Báo cáo của người dùng:
- Xảy ra với ngày tháng thuộc các năm khác nhau
- Một số người dùng thấy, một số thì không
- Xóa cache không giúp ích gì

Đây là code sắp xếp:
[dán code sắp xếp]

Điều gì có thể gây ra việc sắp xếp không nhất quán, và làm thế nào tôi có thể
tạo một trường hợp thử nghiệm để tái hiện lỗi này?

AI có thể xác định rằng bạn đang sắp xếp chuỗi ngày tháng theo thứ tự từ điển thay vì theo thứ tự thời gian, và vấn đề chỉ xuất hiện khi ngày tháng vượt qua ranh giới năm (ví dụ: "31/12/2025" so với "01/01/2026").

Mẫu 5: Dịch thông báo lỗi

Một số thông báo lỗi thực sự khó hiểu. AI rất giỏi trong việc dịch chúng:

Tôi nhận được lỗi này và tôi không biết nó có nghĩa là gì:

LỖI NGHIÊM TRỌNG: mark-compacts không hiệu quả gần giới hạn heap
Cấp phát thất bại - JavaScript heap hết bộ nhớ

Điều này xảy ra trong quá trình xây dựng của chúng tôi khi xử lý
hơn 500 file markdown. Đây là script xây dựng của chúng tôi:
[dán cấu hình xây dựng]

AI dịch: Tiến trình Node.js của bạn đang hết bộ nhớ trong quá trình xây dựng. Nó sẽ đề xuất tăng kích thước heap của Node.js bằng --max-old-space-size và có thể xác định phần nào trong quá trình xây dựng đang ngốn bộ nhớ.

Kiểm tra nhanh: Gỡ lỗi này

Đây là một kịch bản gỡ lỗi thực tế. Bạn sẽ dán gì vào trợ lý AI?

Lỗi: Tính năng tìm kiếm của ứng dụng React của bạn trả về kết quả, nhưng khi nhấp vào một kết quả sẽ điều hướng đến trang sai.

Những gì bạn biết: Điều này chỉ xảy ra khi kết quả tìm kiếm chứa các mục có ký tự đặc biệt trong tên của chúng (như "Ben & Jerry's").

Hãy nghĩ về code bạn sẽ đưa vào và ngữ cảnh nào sẽ hữu ích. Các file chính sẽ là: thành phần kết quả tìm kiếm, logic xây dựng URL và trình xử lý điều hướng. Nguyên nhân có thể xảy ra? Mã hóa URL — ký tự & đang được hiểu là dấu phân cách tham số truy vấn.

Nâng cao: Gỡ lỗi nhiều file

Các lỗi thực sự hiếm khi chỉ nằm trong một file. Khi vấn đề trải rộng trên nhiều file, đây là cách cấu trúc yêu cầu AI của bạn:

Tôi gặp lỗi trong đó các tùy chọn của người dùng không được lưu lại sau khi load lại trang.
Việc lưu dường như hoạt động (không có lỗi), nhưng
các tùy chọn bị reset khi làm mới trang.

Đây là luồng hoạt động:
1. Người dùng cập nhật tùy chọn trong SettingsPanel.tsx
2. Gọi PreferenceService.save()
3. Gọi API endpoint trong preferences.controller.ts
4. Ghi vào cơ sở dữ liệu thông qua PreferenceRepository.ts

[dán code liên quan của từng file]

API trả về 200 với các tùy chọn đã được cập nhật.
Công cụ dành cho nhà phát triển trình duyệt cho thấy yêu cầu thành công.
Nhưng sau khi load lại, các tùy chọn cũ lại xuất hiện.

Dữ liệu bị mất ở đâu trong chuỗi này?

Bằng cách hiển thị toàn bộ luồng hoạt động, AI có thể theo dõi dữ liệu qua từng lớp. Có thể API lưu đúng cách nhưng giao diện người dùng đang đọc từ cache cũ. Có thể thao tác ghi vào cơ sở dữ liệu thành công nhưng truy vấn đọc lại truy cập vào một bản sao chưa được đồng bộ hóa.

Khi AI gỡ lỗi sai

Việc gỡ lỗi bằng AI không hoàn hảo. Hãy cẩn thận với những cạm bẫy sau:

Câu trả lời sai đầy tự tin. Đôi khi AI sẽ đưa ra một lời giải thích nghe có vẻ hợp lý nhưng hoàn toàn sai. Luôn luôn xác minh bằng cách kiểm tra hành vi thực tế so với lời giải thích của AI.

Đưa ra triệu chứng, không phải nguyên nhân. Đôi khi AI sửa thông báo lỗi mà không giải quyết nguyên nhân gốc rễ. Nếu cách khắc phục là "thêm kiểm tra null", hãy hỏi: "Nhưng tại sao giá trị này lại là null ngay từ đầu?"

Bỏ qua môi trường của bạn. AI có thể đề xuất các bản sửa lỗi cho một phiên bản thư viện khác hoặc một hệ điều hành khác. Luôn luôn đề cập đến những phiên bản cụ thể của bạn.

Các giải pháp quá phức tạp. Nếu AI đề xuất một bản sửa lỗi dài 50 dòng cho một lỗi đơn giản, hãy lùi lại. Hãy hỏi: "Có lời giải thích nào đơn giản hơn cho lỗi này không?"

Xây dựng template prompt thông báo gỡ lỗi

Đây là một template bạn có thể sử dụng lại cho bất kỳ phiên gỡ lỗi nào:

## Lỗi
[dán thông báo lỗi và stack trace]

## Môi trường
- Ngôn ngữ/Runtime: [ví dụ: Node.js 20.x, Python 3.12]
- Framework: [ví dụ: Express 4.18, Django 5.0]
- Hệ điều hành: [nếu có liên quan]
- Các dependency liên quan: [phiên bản của các thư viện chính]

## Code
[dán các file/hàm code liên quan]

## Hành vi mong đợi
[điều gì nên xảy ra]

## Hành vi thực tế
[điều gì thực sự xảy ra]

## Những gì tôi đã thử
[liệt kê bất kỳ bước gỡ lỗi nào đã thực hiện]

## Ngữ cảnh bổ sung
[bất kỳ mẫu nào: không liên tục? điều kiện cụ thể?]

Hãy điền vào phần này trước phiên gỡ lỗi tiếp theo của bạn. Bạn sẽ ngạc nhiên về tốc độ AI giải quyết vấn đề khi được cung cấp ngữ cảnh phù hợp.

Những điểm chính cần ghi nhớ

  • Luôn cung cấp bộ ba thông tin gỡ lỗi: lỗi, code và hành vi mong đợi
  • Sử dụng template gỡ lỗi phù hợp với tình huống (phân tích stack trace, gỡ lỗi khác biệt, phương pháp "vịt cao su", tái tạo hoặc dịch lỗi)
  • Đối với các lỗi nhiều file, hãy hiển thị toàn bộ luồng dữ liệu
  • Xác minh lời giải thích của AI — đừng chỉ áp dụng các bản sửa lỗi một cách mù quáng
  • Hãy hỏi "tại sao?" để tìm ra nguyên nhân gốc rễ, chứ không chỉ khắc phục triệu chứng
  • Xây dựng một template prompt gỡ lỗi có thể tái sử dụng
  • Câu 1:

    Kỹ thuật 'vịt cao su' được tăng cường bằng AI là gì?

    GIẢI THÍCH:

    Kỹ thuật gỡ lỗi vịt cao su kinh điển thậm chí còn hiệu quả hơn với AI: Hành động giải thích rõ ràng vấn đề của bạn thường hé lộ giải pháp, và nếu không, AI thực sự có thể giúp giải quyết nó.

  • Câu 2:

    Khi AI đề xuất một giải pháp, bạn nên làm gì đầu tiên?

    GIẢI THÍCH:

    Hiểu tại sao một giải pháp hiệu quả là rất quan trọng. Nếu không hiểu nguyên nhân gốc rễ, bạn có thể gây ra lỗi mới hoặc bỏ sót các vấn đề liên quan. Giải thích của AI cũng dạy bạn các mẫu mà bạn sẽ nhận ra vào lần sau.

  • Câu 3:

    Điều quan trọng nhất cần cung cấp khi yêu cầu AI hỗ trợ gỡ lỗi là gì?

    GIẢI THÍCH:

    Bộ ba yếu tố gỡ lỗi — thông báo lỗi, đoạn code liên quan và hành vi mong đợi — cung cấp cho AI mọi thứ cần thiết để chẩn đoán vấn đề. Thiếu bất kỳ yếu tố nào trong số này sẽ buộc AI phải đoán.

Thứ Tư, 10/06/2026 11:02
51 👨 32
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
❖ Phát triển Web với AI