Cách dùng ChatGPT debug code

Debug code không đơn thuần là tìm một dòng đang báo lỗi rồi sửa cho chương trình chạy lại. Trong nhiều trường hợp, đoạn mã vẫn chạy nhưng cho kết quả sai, chậm, thiếu dữ liệu hoặc phát sinh lỗi chỉ ở một số tình huống đặc biệt. Đây là lúc ChatGPT có thể trở thành một trợ lý hữu ích trong quá trình kiểm tra và xử lý code.

Cách dùng ChatGPT debug code hiệu quả không nằm ở việc dán toàn bộ dự án vào khung trò chuyện rồi yêu cầu “sửa giúp”. Quan trọng hơn là cung cấp đúng bối cảnh, mô tả hiện tượng, chỉ ra kết quả mong muốn và yêu cầu phân tích nguyên nhân trước khi thay đổi mã nguồn. Khi được cung cấp đủ thông tin, ChatGPT có thể hỗ trợ đọc code, lần theo luồng xử lý, phát hiện điều kiện bất thường, giải thích thông báo lỗi và đề xuất hướng sửa.

Bài viết này hướng dẫn một quy trình thực tế để dùng ChatGPT trong quá trình debug, từ việc chuẩn bị đoạn code, mô tả lỗi, phân tích nguyên nhân cho đến kiểm tra lại phiên bản đã sửa. Cách tiếp cận này phù hợp với cả người mới học lập trình và người đã thường xuyên làm việc với PHP, JavaScript, HTML, API hoặc các ứng dụng web.

Cách dùng ChatGPT debug code
Cách dùng ChatGPT debug code

ChatGPT hỗ trợ debug code như thế nào?

Khi debug thủ công, lập trình viên thường phải đọc log, xác định vị trí lỗi, kiểm tra giá trị biến, theo dõi luồng thực thi và thử từng giả thuyết. ChatGPT có thể hỗ trợ một phần đáng kể trong các bước này bằng cách phân tích đoạn code và thông tin mà người dùng cung cấp.

Điểm quan trọng là ChatGPT không nhìn thấy toàn bộ môi trường chạy chương trình nếu bạn không cung cấp thông tin liên quan. Nó không tự biết server đang cấu hình ra sao, database có dữ liệu gì, phiên bản PHP nào đang được sử dụng hay API bên ngoài đang trả về nội dung gì. Vì vậy, chất lượng câu trả lời phụ thuộc rất nhiều vào dữ liệu đầu vào.

Với một đoạn code có lỗi, ChatGPT có thể hỗ trợ theo nhiều hướng:

  • Giải thích thông báo lỗi theo cách dễ hiểu hơn.
  • Xác định những dòng code có khả năng gây ra lỗi.
  • Phân tích luồng xử lý để tìm nguyên nhân thay vì chỉ sửa biểu hiện bên ngoài.
  • Kiểm tra điều kiện if, vòng lặp, hàm, biến và dữ liệu đầu vào.
  • Phát hiện trường hợp biến có thể chưa được khởi tạo hoặc có giá trị không đúng kiểu.
  • Kiểm tra truy vấn database và cách xử lý kết quả trả về.
  • Phân tích request và response khi làm việc với API.
  • Đề xuất cách viết lại một phần code để dễ kiểm tra và bảo trì hơn.
  • Giải thích sự khác nhau giữa kết quả hiện tại và kết quả mong muốn.

Tuy nhiên, không nên xem câu trả lời đầu tiên của ChatGPT là kết luận cuối cùng. Một đề xuất sửa code chỉ thực sự có giá trị sau khi được chạy thử trong môi trường thực tế và kiểm tra lại với dữ liệu cụ thể.

Chuẩn bị thông tin trước khi đưa code cho ChatGPT

Một trong những lỗi phổ biến khi nhờ ChatGPT debug là chỉ gửi một đoạn code và viết: “Code này bị lỗi, sửa giúp tôi”. Cách hỏi như vậy thường thiếu thông tin quan trọng khiến việc phân tích trở nên khó chính xác.

Trước khi gửi code, nên chuẩn bị ít nhất bốn nhóm thông tin: mục đích của đoạn code, hiện tượng đang xảy ra, lỗi nhận được và kết quả mong muốn.

Ví dụ, thay vì chỉ gửi một hàm xử lý đăng nhập, có thể mô tả rõ rằng người dùng nhập đúng tài khoản và mật khẩu nhưng hệ thống vẫn trả về thông báo đăng nhập thất bại. Nếu có thông báo lỗi từ PHP hoặc JavaScript, hãy đưa nguyên văn thông báo đó vào câu hỏi.

Một yêu cầu có bối cảnh rõ ràng có thể được viết như sau:

Hãy debug đoạn PHP dưới đây.

Mục đích:
- Kiểm tra tài khoản và mật khẩu người dùng.
- Nếu thông tin đúng thì tạo session đăng nhập.

Hiện tượng:
- Người dùng nhập đúng tài khoản và mật khẩu.
- Database có bản ghi tương ứng.
- Tuy nhiên chương trình vẫn trả về "Sai thông tin đăng nhập".

Kết quả mong muốn:
- Nếu tài khoản và mật khẩu đúng thì đăng nhập thành công.
- Nếu sai thì hiển thị thông báo lỗi.

Hãy:
1. Phân tích nguyên nhân.
2. Chỉ ra dòng code có vấn đề.
3. Giải thích vì sao xảy ra lỗi.
4. Đề xuất cách sửa.
5. Không thay đổi những phần không liên quan.

Cách đặt vấn đề này giúp ChatGPT hiểu rằng mục tiêu không phải chỉ là viết lại code mà là tìm nguyên nhân khiến hành vi hiện tại khác với yêu cầu.

Cách gửi đoạn code để ChatGPT phân tích chính xác

Không phải lúc nào cũng nên gửi toàn bộ source code của một website hoặc ứng dụng. Một dự án lớn có thể chứa hàng nghìn dòng mã, trong khi lỗi chỉ nằm ở một hàm hoặc một đoạn xử lý dữ liệu.

Hãy bắt đầu bằng phần code trực tiếp liên quan đến lỗi. Nếu đoạn code phụ thuộc vào một hàm khác, class khác hoặc dữ liệu được tạo ở phía trước, hãy bổ sung phần liên quan đó.

Ví dụ, nếu lỗi xuất hiện khi lấy dữ liệu từ database, nên cung cấp đoạn tạo kết nối, truy vấn và xử lý kết quả nếu chúng có liên quan. Không nhất thiết phải gửi toàn bộ giao diện website nếu lỗi nằm ở một truy vấn PHP.

Đối với code PHP, có thể yêu cầu ChatGPT phân tích theo cấu trúc sau:

<?php

$conn = new mysqli($host, $user, $password, $database);

$sql = "SELECT id, name FROM users WHERE status = 1";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo $row['name'];
    }
}

?>

Sau đoạn code, hãy mô tả chính xác vấn đề. Chẳng hạn, nếu chương trình báo lỗi khi num_rows được sử dụng, hãy cho biết lỗi xuất hiện ở thời điểm nào và nội dung thông báo cụ thể.

Đối với JavaScript cũng nên gửi phần code liên quan thay vì toàn bộ file nếu file quá dài:

const button = document.querySelector('#submit');

button.addEventListener('click', function () {
    const username = document.querySelector('#username').value;

    if (username.trim() === '') {
        alert('Vui lòng nhập tên đăng nhập');
        return;
    }

    submitForm(username);
});

Nếu chương trình báo submitForm is not defined, hãy cung cấp cả phần khai báo hoặc file chứa hàm này nếu hàm nằm ở nơi khác. Việc bổ sung đúng phần phụ thuộc sẽ giúp ChatGPT tránh đưa ra giả định không cần thiết.

Phân biệt lỗi cú pháp và lỗi logic

Đây là một trong những điểm quan trọng nhất khi dùng ChatGPT debug code. Không phải mọi lỗi đều có cách xử lý giống nhau.

Lỗi cú pháp thường xảy ra khi mã nguồn không tuân thủ cú pháp của ngôn ngữ lập trình. Chẳng hạn thiếu dấu chấm phẩy, đóng ngoặc không đúng, viết sai tên cấu trúc hoặc sử dụng cú pháp không được hỗ trợ bởi phiên bản đang chạy.

Ví dụ PHP sau có lỗi cú pháp:

<?php

$name = "Web Mới"

echo $name;

?>

Trong trường hợp này, ChatGPT có thể nhanh chóng nhận ra câu lệnh khai báo biến thiếu dấu chấm phẩy.

Trong khi đó, lỗi logic khó phát hiện hơn. Code có thể chạy bình thường nhưng kết quả không đúng với yêu cầu.

<?php

$price = 500000;
$discount = 10;

$finalPrice = $price - $discount;

echo $finalPrice;

?>

Đoạn code trên có thể không gây lỗi cú pháp nhưng nếu mục đích của biến discount là phần trăm giảm giá thì phép tính đã sai. Giá trị 10 cần được hiểu là 10% thay vì trừ trực tiếp 10 đơn vị tiền tệ.

Khi gặp loại lỗi này, yêu cầu “sửa lỗi code” chưa đủ. Nên nói rõ ý nghĩa của dữ liệu và quy tắc nghiệp vụ. ChatGPT chỉ có thể đánh giá logic dựa trên yêu cầu mà bạn cung cấp.

Cách yêu cầu ChatGPT tìm nguyên nhân thay vì sửa ngay

Một trong những cách dùng ChatGPT debug code hiệu quả là yêu cầu công cụ phân tích nguyên nhân trước, chưa sửa code ngay. Điều này giúp hạn chế trường hợp code được viết lại nhưng lỗi gốc vẫn còn hoặc phát sinh lỗi mới.

Có thể yêu cầu theo trình tự:

  1. Xác định những dòng có khả năng gây lỗi.
  2. Giải thích luồng dữ liệu đi qua các dòng đó.
  3. Nêu giả thuyết về nguyên nhân.
  4. Chỉ ra thông tin nào cần kiểm tra để xác nhận giả thuyết.
  5. Sau đó mới đề xuất bản sửa.

Ví dụ một yêu cầu có thể viết như sau:

Đừng sửa code ngay.

Hãy đọc đoạn code dưới đây và phân tích:
1. Code đang làm gì?
2. Luồng dữ liệu đi qua những bước nào?
3. Tại vị trí nào có khả năng xảy ra lỗi?
4. Nguyên nhân nào có khả năng phù hợp nhất với hiện tượng tôi mô tả?
5. Cần kiểm tra giá trị nào để xác nhận nguyên nhân?

Sau phần phân tích mới đưa ra code đã sửa.

Cách này đặc biệt hữu ích khi làm việc với những lỗi không thể nhìn thấy chỉ bằng việc đọc một dòng code. Chẳng hạn, một biến có thể nhận giá trị sai từ form, sau đó được truyền qua nhiều hàm và chỉ gây lỗi ở bước cuối cùng.

Debug theo thông báo lỗi cụ thể

Nếu chương trình đã cung cấp thông báo lỗi, hãy gửi nguyên văn thông báo đó cho ChatGPT. Không nên tự rút gọn hoặc diễn giải lại nếu chưa hiểu rõ nội dung.

Thông báo lỗi thường chứa nhiều thông tin hữu ích như loại lỗi, file, dòng code và đôi khi cả chuỗi gọi hàm. Những dữ liệu này giúp khoanh vùng vấn đề nhanh hơn.

Ví dụ:

Fatal error: Uncaught Error: Call to undefined function getUserName()
in /var/www/html/account.php:25

Thay vì chỉ nói “PHP bị lỗi ở dòng 25”, hãy gửi toàn bộ thông báo cùng phần code xung quanh dòng đó. Sau đó có thể yêu cầu ChatGPT giải thích:

Hãy giải thích thông báo lỗi này theo cách dễ hiểu.

Tôi muốn biết:
- Lỗi thuộc loại nào?
- Hàm nào đang bị gọi nhưng không tồn tại?
- Vì sao chương trình lại gọi hàm đó?
- Tôi nên kiểm tra file hoặc phần code nào?
- Hãy đưa ra cách sửa nhưng giữ nguyên kiến trúc hiện tại nếu có thể.

Nếu lỗi xuất hiện trong môi trường server, cũng nên cung cấp phiên bản ngôn ngữ và framework nếu chúng có ảnh hưởng đến cách xử lý.

Cho ChatGPT biết kết quả hiện tại và kết quả mong muốn

Đây là thông tin thường bị bỏ qua nhưng lại rất quan trọng khi debug các lỗi logic. Một chương trình chỉ được xem là hoạt động đúng khi kết quả thực tế phù hợp với yêu cầu.

Hãy mô tả theo cặp “đang nhận được” và “cần nhận được”.

Thông tin Nội dung nên cung cấp
Đầu vào Dữ liệu người dùng nhập hoặc dữ liệu chương trình nhận được.
Kết quả hiện tại Điều thực tế đang xảy ra sau khi chạy code.
Kết quả mong muốn Điều chương trình cần thực hiện theo yêu cầu.
Thông báo lỗi Nội dung lỗi chính xác nếu hệ thống có trả về.
Môi trường Ngôn ngữ, phiên bản, framework hoặc hệ thống liên quan.

Ví dụ, câu “API không chạy” quá chung chung. Một mô tả hữu ích hơn là: “Gửi POST request với trường email và password, server trả về HTTP 200 nhưng JSON không có token, trong khi tôi mong muốn token được trả về sau khi xác thực thành công”.

Với thông tin như vậy, ChatGPT có thể tập trung kiểm tra luồng xác thực, cấu trúc response, điều kiện tạo token và cách dữ liệu được trả về thay vì đoán một lỗi chung chung.

Debug từng bước thay vì sửa toàn bộ code

Khi một đoạn code có nhiều vấn đề, việc yêu cầu sửa toàn bộ cùng lúc có thể khiến bản sửa trở nên khó kiểm soát. Một thay đổi ở phần này đôi khi lại làm ảnh hưởng đến phần khác. Vì vậy, với những đoạn code phức tạp, nên chia quá trình debug thành từng lớp.

Chẳng hạn một chức năng đăng nhập trên website có thể trải qua chuỗi xử lý:

  1. Người dùng nhập dữ liệu vào form.
  2. JavaScript kiểm tra dữ liệu phía trình duyệt.
  3. Request được gửi đến server.
  4. PHP tiếp nhận dữ liệu.
  5. PHP truy vấn database.
  6. Kết quả truy vấn được kiểm tra.
  7. Session hoặc token được tạo.
  8. Server trả response về trình duyệt.
  9. JavaScript xử lý kết quả và cập nhật giao diện.

Nếu chỉ nói “chức năng đăng nhập không hoạt động”, ChatGPT phải suy đoán lỗi có thể nằm ở bất kỳ bước nào. Thay vào đó, hãy xác định bước cuối cùng chắc chắn đang hoạt động rồi kiểm tra bước kế tiếp.

Ví dụ, nếu đã xác nhận request gửi đến server thành công thì có thể bỏ qua phần form và tập trung vào PHP. Nếu PHP nhận đúng dữ liệu nhưng database không trả kết quả, hãy tập trung vào truy vấn và dữ liệu database.

Cách chia nhỏ này giúp quá trình debug có tính hệ thống hơn và đặc biệt hữu ích khi code có nhiều file hoặc nhiều thành phần liên kết với nhau.

Dùng ChatGPT kiểm tra giá trị biến trong quá trình chạy

Nhiều lỗi không nằm trực tiếp ở câu lệnh mà xuất phát từ giá trị của biến tại một thời điểm cụ thể. Một biến có thể mang giá trị rỗng, null, chuỗi thay vì số hoặc một mảng có cấu trúc khác với dự kiến.

Khi gặp trường hợp này, hãy cung cấp giá trị thực tế mà chương trình nhận được. Nếu chưa biết biến đang chứa gì, có thể nhờ ChatGPT đề xuất những vị trí cần kiểm tra.

Ví dụ:

<?php

$total = $price * $quantity;

if ($total > 1000000) {
    $discount = 10;
}

echo $total - $discount;

?>

Nhìn vào code, một vấn đề có thể xảy ra khi $total không vượt quá 1.000.000. Khi đó $discount chưa được gán giá trị nhưng vẫn được sử dụng.

Thay vì chỉ yêu cầu sửa, có thể đặt câu hỏi:

Hãy kiểm tra các biến trong đoạn PHP này.

Tôi muốn biết:
- Biến nào có thể chưa được khởi tạo?
- Trong trường hợp nào biến đó không có giá trị?
- Có nhánh điều kiện nào khiến chương trình sử dụng biến trước khi gán không?
- Hãy giải thích bằng một ví dụ dữ liệu cụ thể.

Cách hỏi này giúp hiểu được nguyên nhân thay vì chỉ nhận một phiên bản code khác.

Nhờ ChatGPT kiểm tra dữ liệu đầu vào

Dữ liệu đầu vào là nguồn của rất nhiều lỗi trong ứng dụng web. Người dùng có thể bỏ trống trường, nhập sai định dạng, gửi dữ liệu ngoài dự kiến hoặc cố tình gửi dữ liệu không hợp lệ.

Khi debug, đừng chỉ kiểm tra trường hợp dữ liệu đúng. Hãy yêu cầu ChatGPT phân tích cả những trường hợp biên.

Ví dụ với một trường số lượng sản phẩm:

<?php

$quantity = $_POST['quantity'];

$total = $price * $quantity;

echo $total;

?>

Có thể đặt câu hỏi:

Hãy phân tích đoạn code này với các trường hợp:
- quantity không tồn tại.
- quantity là chuỗi rỗng.
- quantity bằng 0.
- quantity là số âm.
- quantity là chữ.
- quantity là một giá trị rất lớn.

Cho biết trường hợp nào có thể gây ra kết quả không mong muốn và cách xử lý phù hợp.

Đây là cách dùng ChatGPT rất hữu ích khi kiểm tra lỗi mà chỉ xuất hiện với một số dữ liệu nhất định. Thay vì kiểm tra một trường hợp duy nhất, bạn có thể yêu cầu xây dựng cả nhóm tình huống để thử nghiệm.

Dùng ChatGPT debug truy vấn database

Database là một trong những khu vực dễ phát sinh lỗi logic. Truy vấn có thể không trả dữ liệu, trả quá nhiều dữ liệu, lọc sai điều kiện hoặc hoạt động khác với suy nghĩ ban đầu của lập trình viên.

Khi debug truy vấn, nên cung cấp cả câu SQL, cấu trúc bảng liên quan và một vài dữ liệu mẫu đã được loại bỏ thông tin nhạy cảm.

Ví dụ:

SELECT id, name, email
FROM users
WHERE status = 1
AND email = '$email'
LIMIT 1;

Nếu truy vấn không tìm thấy bản ghi, không nên chỉ hỏi “SQL này sai ở đâu?”. Hãy mô tả dữ liệu thực tế và điều kiện mà bạn mong muốn.

Hãy phân tích truy vấn này.

Mục tiêu:
- Tìm đúng một người dùng theo email.
- Chỉ lấy tài khoản đang hoạt động.

Hiện tượng:
- Tôi chắc chắn email tồn tại trong database.
- Nhưng truy vấn không trả về bản ghi.

Hãy kiểm tra:
1. Điều kiện WHERE.
2. Kiểu dữ liệu của cột email.
3. Giá trị thực tế của biến email.
4. Những nguyên nhân có thể khiến truy vấn không khớp.
5. Cách kiểm tra từng nguyên nhân.

Nếu cần phân tích sâu hơn, hãy cung cấp cấu trúc bảng. Chẳng hạn tên cột, kiểu dữ liệu, khóa chính và các điều kiện liên quan. Không nên gửi mật khẩu database, API key hoặc thông tin xác thực thật vào cuộc trò chuyện.

Kiểm tra lỗi khi làm việc với API

API thường có nhiều điểm có thể phát sinh lỗi: request sai URL, phương thức HTTP không đúng, header thiếu, dữ liệu gửi lên không đúng định dạng, xác thực thất bại hoặc server trả response khác với dự kiến.

Vì vậy, khi dùng ChatGPT debug API, nên cung cấp đủ bốn thành phần chính: URL hoặc endpoint, method, request và response.

Ví dụ:

POST /api/login

Content-Type: application/json

{
    "email": "user@example.com",
    "password": "123456"
}

Response thực tế:

{
    "success": true,
    "message": "Login successful"
}

Trong khi ứng dụng lại đang chờ:

{
    "success": true,
    "token": "..."
}

Trong trường hợp này, vấn đề có thể không nằm ở request. Client đang mong đợi trường token nhưng response thực tế không có trường này. Khi cung cấp cả hai cấu trúc, ChatGPT có thể giúp xác định sự khác nhau rõ ràng hơn.

Có thể yêu cầu:

Hãy so sánh request, response thực tế và response mà frontend mong đợi.

Không sửa code ngay.

Hãy chỉ ra:
- Những trường dữ liệu khác nhau.
- Kiểu dữ liệu khác nhau nếu có.
- Trường nào đang bị thiếu.
- Thành phần nào cần thay đổi: frontend, backend hay cả hai.
- Cần kiểm tra thêm thông tin gì trước khi sửa.

Debug JavaScript khi giao diện không hoạt động

Với JavaScript, nhiều lỗi biểu hiện dưới dạng một nút bấm không phản hồi, popup không mở, dữ liệu không cập nhật hoặc request không được gửi. Nguyên nhân có thể nằm ở JavaScript, HTML, dữ liệu hoặc quá trình giao tiếp với server.

Ví dụ:

const button = document.querySelector('#save');

button.addEventListener('click', function () {
    saveData();
});

Nếu nút không hoạt động, chưa thể kết luận ngay rằng addEventListener bị lỗi. Có thể phần tử có ID khác, script chạy trước khi HTML được tạo, hàm saveData không tồn tại hoặc một lỗi JavaScript trước đó đã khiến đoạn mã này không được thực thi.

Hãy cung cấp cả lỗi trong Console nếu có. Ví dụ, thay vì viết “nút Save không chạy”, hãy mô tả rằng nút có hiển thị, sự kiện click không tạo request và Console xuất hiện một thông báo lỗi cụ thể.

Có thể yêu cầu ChatGPT phân tích theo chuỗi:

  1. Phần tử có tồn tại không?
  2. JavaScript có chạy đến đoạn đăng ký sự kiện không?
  3. Sự kiện có được kích hoạt không?
  4. Hàm được gọi có tồn tại không?
  5. Hàm có tạo request hay thực hiện hành động mong muốn không?
  6. Response có trả về đúng dữ liệu không?

Cách kiểm tra theo chuỗi giúp tránh việc sửa một dòng code mà bỏ qua nguyên nhân nằm ở bước trước đó.

Yêu cầu ChatGPT so sánh code trước và sau khi sửa

Khi ChatGPT đưa ra bản sửa, không nên chỉ sao chép toàn bộ code mới nếu bạn không biết những gì đã thay đổi. Hãy yêu cầu giải thích sự khác biệt giữa phiên bản cũ và phiên bản mới.

Một yêu cầu hữu ích là:

Hãy sửa đoạn code nhưng giữ nguyên cấu trúc hiện tại nếu không cần thiết phải thay đổi.

Sau khi sửa:
1. Đưa toàn bộ code hoàn chỉnh.
2. Liệt kê chính xác những phần đã thay đổi.
3. Giải thích mục đích của từng thay đổi.
4. Chỉ ra lỗi trong phiên bản cũ.
5. Nêu những trường hợp có thể vẫn cần kiểm tra.

Cách này đặc biệt quan trọng với code đang chạy trên website thật. Một bản sửa quá rộng có thể vô tình làm thay đổi hành vi của những chức năng vốn đang hoạt động bình thường.

Yêu cầu tạo bản sửa tối thiểu

Trong quá trình debug, không phải lúc nào viết lại toàn bộ hàm cũng là lựa chọn phù hợp. Nếu lỗi chỉ nằm ở một điều kiện hoặc một phép tính, bản sửa nhỏ thường dễ kiểm tra hơn.

Có thể yêu cầu ChatGPT:

Hãy sửa lỗi với thay đổi tối thiểu.

Yêu cầu:
- Không viết lại toàn bộ chức năng.
- Không thay đổi tên biến nếu không cần.
- Không thay đổi cấu trúc database.
- Không thay đổi giao diện.
- Chỉ sửa phần trực tiếp gây lỗi.
- Sau đó giải thích chính xác dòng nào đã được thay đổi.

Đây là một nguyên tắc hữu ích khi debug code đang được sử dụng thực tế. Càng ít phần không liên quan bị thay đổi, càng dễ xác định tác động của bản sửa.

Kiểm tra lại bản sửa bằng các trường hợp khác nhau

Một lỗi được sửa thành công trong một trường hợp chưa có nghĩa là chức năng đã hoàn toàn ổn định. Bản sửa có thể giải quyết trường hợp ban đầu nhưng tạo ra lỗi ở một trường hợp khác.

Sau khi có code mới, hãy yêu cầu ChatGPT tạo danh sách tình huống kiểm thử dựa trên chính chức năng đang được sửa.

Ví dụ với chức năng đăng nhập, có thể yêu cầu kiểm tra:

  • Tài khoản và mật khẩu đều chính xác.
  • Tài khoản tồn tại nhưng mật khẩu sai.
  • Email không tồn tại.
  • Hai trường bị bỏ trống.
  • Email có khoảng trắng thừa.
  • Tài khoản đã bị khóa.
  • Database không kết nối được.
  • Request gửi dữ liệu không đúng định dạng.

Với mỗi trường hợp, nên xác định rõ đầu vào, kết quả mong muốn và kết quả thực tế. Đây là bước biến việc “nhờ AI sửa code” thành một quy trình debug có kiểm chứng.

Debug lỗi chỉ xuất hiện trong một số trường hợp

Có những lỗi rất khó phát hiện vì chương trình vẫn hoạt động bình thường trong phần lớn thời gian. Chỉ khi người dùng nhập một loại dữ liệu đặc biệt, thực hiện thao tác theo một trình tự cụ thể hoặc sử dụng thiết bị khác thì lỗi mới xuất hiện.

Trong tình huống này, hãy mô tả điều kiện để lỗi xuất hiện thay vì chỉ mô tả bản thân lỗi.

Ví dụ, nếu chức năng tải ảnh hoạt động với ảnh nhỏ nhưng thất bại với ảnh dung lượng lớn, thông tin quan trọng không chỉ là “upload ảnh bị lỗi”. Cần cho biết kích thước ảnh, định dạng, dung lượng và thông báo server trả về.

Có thể yêu cầu ChatGPT lập bảng tình huống:

Hãy phân tích lỗi upload file.

Hiện tượng:
- File JPG dưới 2 MB: hoạt động.
- File JPG trên 10 MB: thất bại.
- File PNG khoảng 3 MB: hoạt động.
- File PDF khoảng 12 MB: thất bại.

Hãy tìm các yếu tố có thể liên quan và đề xuất cách kiểm tra từng yếu tố.

Không sửa code ngay nếu chưa xác định được nguyên nhân.

Việc cung cấp những trường hợp hoạt động và không hoạt động giúp thu hẹp phạm vi tìm kiếm. ChatGPT có thể dựa vào sự khác biệt giữa các trường hợp để đưa ra giả thuyết có cơ sở hơn.

Nhờ ChatGPT phân tích stack trace

Đối với các ứng dụng phức tạp, thông báo lỗi đôi khi đi kèm stack trace cho biết chuỗi hàm đã được gọi trước khi lỗi xảy ra. Đây là dữ liệu rất hữu ích khi debug.

Không nên chỉ gửi dòng cuối cùng của stack trace. Nếu có thể, hãy cung cấp toàn bộ phần liên quan cùng đoạn code tương ứng.

Ví dụ yêu cầu:

Đây là stack trace của lỗi.

Hãy phân tích theo thứ tự từ hàm đầu tiên đến vị trí lỗi.

Tôi muốn biết:
- Hàm nào gọi hàm nào?
- Dữ liệu được truyền qua các bước ra sao?
- Lỗi thực sự phát sinh ở đâu?
- Dòng nào chỉ là nơi lỗi được phát hiện chứ không phải nguyên nhân ban đầu?
- Có khả năng lỗi bắt nguồn từ dữ liệu đầu vào không?

Cách phân tích này rất hữu ích vì vị trí được báo lỗi không phải lúc nào cũng là nơi tạo ra vấn đề. Một giá trị sai có thể được tạo từ đầu chương trình nhưng chỉ gây lỗi khi đi đến một hàm khác.

Kiểm tra code sau khi ChatGPT đề xuất bản sửa

Không nên mặc định rằng code do ChatGPT tạo ra chắc chắn đúng. Đây là nguyên tắc quan trọng nhất khi sử dụng AI trong lập trình.

Sau khi nhận bản sửa, hãy yêu cầu ChatGPT tự kiểm tra lại theo nhiều tiêu chí:

  • Cú pháp có hợp lệ không?
  • Có biến nào chưa được khai báo hoặc có khả năng không tồn tại không?
  • Có thay đổi hành vi của chức năng khác không?
  • Có trường hợp dữ liệu rỗng hoặc không hợp lệ chưa được xử lý không?
  • Có phát sinh lỗi kiểu dữ liệu không?
  • Có truy vấn hoặc vòng lặp nào có thể gây vấn đề về hiệu suất không?
  • Có nguy cơ bảo mật mới được tạo ra không?
  • Bản sửa có thực sự giải quyết nguyên nhân ban đầu không?

Một prompt kiểm tra khá hữu ích là:

Đây là phiên bản code sau khi sửa.

Hãy review lại như một lập trình viên kiểm thử.

Không mặc định rằng code đã đúng.

Hãy tìm:
- lỗi cú pháp;
- lỗi logic;
- trường hợp biên;
- lỗi xử lý dữ liệu;
- vấn đề hiệu suất;
- vấn đề bảo mật;
- những giả định chưa được kiểm chứng.

Nếu không tìm thấy lỗi, hãy nêu rõ những phần vẫn cần kiểm tra bằng cách chạy thực tế.

Điều này giúp biến ChatGPT từ công cụ đề xuất bản sửa thành một lớp kiểm tra thứ hai.

Đừng đưa dữ liệu nhạy cảm vào đoạn code debug

Khi gửi code cho ChatGPT, cần loại bỏ những thông tin không cần thiết cho việc phân tích. Đặc biệt, không nên đưa mật khẩu thật, API key, token truy cập, khóa bí mật hoặc thông tin xác thực của hệ thống đang hoạt động.

Ví dụ không nên giữ nguyên thông tin xác thực trong đoạn code:

$dbPassword = "mat-khau-that";
$apiKey = "api-key-that";

Có thể thay bằng giá trị giả:

$dbPassword = "YOUR_DATABASE_PASSWORD";
$apiKey = "YOUR_API_KEY";

Điều quan trọng là vẫn giữ được cấu trúc dữ liệu để ChatGPT hiểu cách chương trình hoạt động nhưng không tiết lộ bí mật thực tế.

Tương tự, dữ liệu khách hàng, thông tin cá nhân hoặc nội dung nội bộ cũng nên được thay bằng dữ liệu mẫu nếu những thông tin đó không cần thiết cho việc debug.

Không để ChatGPT tự đoán những phần còn thiếu

Một nguyên nhân khiến câu trả lời debug thiếu chính xác là đoạn code được cung cấp không đủ nhưng người dùng không nói rõ phần nào đang bị thiếu.

Nếu một hàm sử dụng biến được khai báo ở file khác, hãy nói rõ điều đó. Nếu một API thuộc hệ thống bên thứ ba, hãy cho biết cấu trúc response thực tế. Nếu lỗi phụ thuộc vào cấu hình server, hãy cung cấp những thông tin liên quan.

Có thể yêu cầu ChatGPT phân biệt giữa điều chắc chắn nhìn thấy trong code và giả thuyết cần kiểm tra.

Hãy phân tích code này nhưng không tự giả định những thông tin tôi chưa cung cấp.

Chia kết quả thành:
1. Điều có thể xác định trực tiếp từ code.
2. Nguyên nhân có khả năng xảy ra.
3. Những thông tin còn thiếu.
4. Những kiểm tra tôi cần thực hiện để xác nhận.

Cách này giúp hạn chế việc nhận một câu trả lời nghe hợp lý nhưng dựa trên những giả định không tồn tại trong hệ thống thực tế.

Dùng ChatGPT tạo checklist debug cho từng lỗi

Nếu một lỗi thường xuyên xuất hiện trong dự án, có thể dùng ChatGPT để xây dựng checklist riêng thay vì mỗi lần gặp lỗi lại bắt đầu từ đầu.

Ví dụ với lỗi API không trả dữ liệu, checklist có thể được xây dựng xoay quanh:

  1. Kiểm tra URL.
  2. Kiểm tra HTTP method.
  3. Kiểm tra request body.
  4. Kiểm tra Content-Type.
  5. Kiểm tra header xác thực.
  6. Kiểm tra status code.
  7. Kiểm tra response body.
  8. Kiểm tra log phía server.
  9. Kiểm tra dữ liệu đầu vào.
  10. Kiểm tra timeout hoặc kết nối mạng.

Checklist có giá trị đặc biệt khi nhiều người cùng làm một dự án. Thay vì mỗi lập trình viên có một cách kiểm tra khác nhau, nhóm có thể sử dụng một quy trình thống nhất rồi dùng ChatGPT hỗ trợ phân tích từng bước.

Yêu cầu ChatGPT viết test case sau khi sửa lỗi

Một bản sửa tốt không chỉ cần giải quyết lỗi hiện tại mà còn nên hạn chế khả năng lỗi quay trở lại trong tương lai. Vì vậy, sau khi xác định nguyên nhân, hãy yêu cầu ChatGPT đề xuất test case phù hợp.

Ví dụ:

Đây là lỗi vừa được sửa.

Hãy tạo các test case để kiểm tra rằng lỗi không quay trở lại.

Với mỗi test case, hãy cho biết:
- Dữ liệu đầu vào.
- Điều kiện ban đầu.
- Thao tác cần thực hiện.
- Kết quả mong đợi.
- Trường hợp nào có thể làm test thất bại.

Nếu dự án có unit test hoặc integration test, có thể yêu cầu ChatGPT viết test dựa trên framework mà dự án đang sử dụng. Tuy nhiên, test do AI tạo ra cũng cần được kiểm tra để bảo đảm nó đang kiểm tra đúng hành vi mong muốn thay vì chỉ kiểm tra lại chính cách triển khai hiện tại.

Khi ChatGPT đưa ra nhiều nguyên nhân khác nhau

Không phải lúc nào một lỗi cũng có duy nhất một nguyên nhân có thể xác định ngay. Nếu thông tin chưa đủ, ChatGPT có thể đưa ra nhiều khả năng.

Trong trường hợp này, đừng yêu cầu chọn đại một nguyên nhân. Hãy yêu cầu sắp xếp các giả thuyết theo cách kiểm chứng được bằng dữ liệu hoặc thao tác cụ thể.

Tôi chưa muốn sửa code.

Có nhiều nguyên nhân có thể xảy ra. Hãy giúp tôi xây dựng kế hoạch kiểm tra.

Với mỗi nguyên nhân:
- Cần kiểm tra điều gì?
- Kiểm tra ở đâu?
- Nếu kết quả A thì kết luận gì?
- Nếu kết quả B thì chuyển sang kiểm tra nào?

Ưu tiên những kiểm tra đơn giản và ít ảnh hưởng đến hệ thống trước.

Cách tiếp cận này biến quá trình debug thành một chuỗi quyết định rõ ràng. Bạn không cần thử ngẫu nhiên nhiều bản sửa mà có thể lần lượt loại bỏ các giả thuyết.

Quy trình dùng ChatGPT debug code hiệu quả

Có thể tóm gọn toàn bộ quá trình thành một quy trình gồm nhiều bước. Mỗi bước có một mục đích riêng và không nên bỏ qua phần kiểm chứng thực tế.

  1. Xác định hiện tượng: ghi lại chính xác chương trình đang làm gì khác với mong muốn.
  2. Thu thập lỗi: lấy nguyên văn thông báo lỗi, log hoặc response nếu có.
  3. Khoanh vùng: xác định chức năng, file hoặc đoạn code liên quan.
  4. Cung cấp bối cảnh: nói rõ ngôn ngữ, phiên bản, framework và môi trường nếu cần.
  5. Gửi dữ liệu mẫu: cung cấp input và output thực tế nhưng loại bỏ thông tin nhạy cảm.
  6. Yêu cầu phân tích: tìm nguyên nhân trước khi yêu cầu viết lại code.
  7. Kiểm tra giả thuyết: thực hiện các bước kiểm tra được đề xuất.
  8. Áp dụng bản sửa: ưu tiên thay đổi tối thiểu nếu không cần thay đổi kiến trúc.
  9. Review lại: kiểm tra cú pháp, logic, bảo mật và các trường hợp biên.
  10. Chạy test: kiểm tra cả trường hợp gây lỗi ban đầu và những trường hợp liên quan.
  11. Ghi nhận nguyên nhân: lưu lại lỗi và cách xử lý để dễ truy tìm nếu vấn đề xuất hiện trở lại.

Điểm quan trọng là ChatGPT chỉ là một thành phần trong quy trình. Việc chạy code, đọc log, kiểm tra database, kiểm tra request thực tế và xác nhận kết quả vẫn cần được thực hiện trong môi trường phù hợp.

Mẫu prompt debug code có thể dùng lại

Nếu thường xuyên làm việc với code, bạn có thể sử dụng một mẫu yêu cầu cố định rồi thay phần thông tin của từng lỗi.

Tôi cần debug đoạn code dưới đây.

Môi trường:
- Ngôn ngữ:
- Phiên bản:
- Framework:
- Hệ thống liên quan:

Mục đích của chức năng:
[ mô tả chức năng ]

Hiện tượng:
[ mô tả chính xác lỗi ]

Kết quả hiện tại:
[ kết quả thực tế ]

Kết quả mong muốn:
[ kết quả cần có ]

Thông báo lỗi:
[ lỗi hoặc log ]

Dữ liệu đầu vào:
[ dữ liệu mẫu ]

Hãy thực hiện theo thứ tự:

1. Giải thích code đang hoạt động như thế nào.
2. Xác định vị trí có khả năng gây lỗi.
3. Phân biệt nguyên nhân chắc chắn và giả thuyết.
4. Chỉ ra những thông tin cần kiểm tra thêm.
5. Đề xuất cách xác nhận nguyên nhân.
6. Sau khi phân tích, đưa ra bản sửa tối thiểu.
7. Giải thích từng thay đổi.
8. Kiểm tra lại bản sửa với các trường hợp biên.
9. Đề xuất test case để xác nhận lỗi đã được xử lý.

Không tự giả định những thông tin tôi chưa cung cấp.
Không thay đổi những phần không liên quan đến lỗi.

Những sai lầm cần tránh khi dùng ChatGPT debug code

Sử dụng AI để debug sẽ hiệu quả hơn nếu tránh một số thói quen dễ làm quá trình xử lý kéo dài.

  • Chỉ gửi code mà không mô tả lỗi: khiến việc phân tích dựa nhiều vào phỏng đoán.
  • Không cung cấp kết quả mong muốn: ChatGPT không biết thế nào mới được xem là đúng theo yêu cầu nghiệp vụ.
  • Gửi quá nhiều code không liên quan: làm vấn đề chính bị che khuất.
  • Chỉ sửa theo câu trả lời đầu tiên: bản sửa cần được kiểm tra trong môi trường thực tế.
  • Bỏ qua thông báo lỗi: log và stack trace thường chứa thông tin quan trọng để khoanh vùng.
  • Không kiểm tra dữ liệu đầu vào: nhiều lỗi logic bắt nguồn từ dữ liệu chứ không phải câu lệnh xử lý.
  • Để AI viết lại quá nhiều: thay đổi lớn khiến việc xác định tác động trở nên khó khăn.
  • Đưa thông tin bí mật vào prompt: nên thay bằng dữ liệu giả khi những thông tin đó không cần thiết.
  • Không kiểm tra trường hợp biên: lỗi có thể quay trở lại khi người dùng nhập dữ liệu khác với trường hợp đã thử.

Cách biến ChatGPT thành trợ lý debug lâu dài

Giá trị của ChatGPT trong lập trình không chỉ nằm ở việc sửa một lỗi cụ thể. Nếu sử dụng đúng cách, bạn có thể biến quá trình trao đổi thành một phương pháp hỗ trợ phát triển phần mềm có cấu trúc hơn.

Thay vì mỗi lần gặp lỗi đều hỏi “sửa code giúp tôi”, hãy duy trì một cách làm thống nhất: mô tả vấn đề, cung cấp bằng chứng, xác định giả thuyết, kiểm tra nguyên nhân, sửa tối thiểu và kiểm thử lại.

Đối với dự án lớn, có thể sử dụng ChatGPT cho nhiều nhiệm vụ liên quan như giải thích code cũ, tìm điểm có khả năng phát sinh lỗi, đề xuất test case, review bản sửa, phân tích log và giúp xây dựng checklist kiểm thử. Tuy nhiên, quyết định cuối cùng vẫn cần dựa trên code thực tế, môi trường chạy và kết quả kiểm tra.

Đặc biệt, không nên biến ChatGPT thành công cụ “đoán lỗi”. Một quy trình debug tốt luôn bắt đầu bằng bằng chứng. Càng cung cấp đúng thông tin về input, output, log, môi trường và hành vi mong muốn, quá trình phân tích càng có cơ sở.

Kết luận

Cách dùng ChatGPT debug code hiệu quả không phải là dán code vào rồi yêu cầu AI sửa toàn bộ. Cách làm đáng tin cậy hơn là sử dụng ChatGPT như một trợ lý phân tích: mô tả hiện tượng, cung cấp thông tin liên quan, yêu cầu tìm nguyên nhân, kiểm tra giả thuyết, áp dụng bản sửa tối thiểu và cuối cùng chạy test để xác nhận.

Với lỗi cú pháp, ChatGPT có thể giúp giải thích và khoanh vùng nhanh. Với lỗi logic, cần cung cấp rõ dữ liệu đầu vào và kết quả mong muốn. Với API, database hoặc ứng dụng web nhiều tầng, nên chia nhỏ luồng xử lý để xác định chính xác nơi vấn đề bắt đầu.

Quan trọng nhất, đừng đánh đồng một đoạn code được AI sửa thành công với một hệ thống đã được kiểm chứng. Code vẫn cần được chạy thử, review, kiểm tra bảo mật và đánh giá với những trường hợp thực tế. Khi kết hợp khả năng phân tích của ChatGPT với quy trình kiểm thử của lập trình viên, việc tìm và xử lý lỗi sẽ có hệ thống, nhanh chóng và dễ kiểm soát hơn.

  • ★★★★★ ★★★★★
  • 0 Bình luận
CEO Bùi Tấn Lực | Founder Web Mới
Bùi Tấn Lực
Tìm hiểu về CEO Bùi Tấn Lực, Founder Web Mới với nhiều năm kinh nghiệm trong lĩnh vực phát triển website, SEO và chia sẻ kiến thức công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Cách dùng ChatGPT debug code
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !