Trang tài liệu
Khóa học C++ nền tảng
Chương 15. Trình gỡ lỗi
Thông báo trình gỡ lỗi

Thông báo trình gỡ lỗi

Thông báo của trình gỡ lỗi là các thông báo hoặc cảnh báo do trình gỡ lỗi cung cấp để giúp bạn xác định các sự cố hoặc lỗi trong mã C++ của mình. Các thông báo này có thể là cảnh báo hoặc thông báo lỗi và có thể cung cấp thông tin hữu ích về trạng thái chương trình của bạn và các sự cố cụ thể gặp phải trong quá trình gỡ lỗi.

Các loại thông báo trình gỡ lỗi

  • Thông báo lỗi: Thông báo cho bạn về các sự cố trong mã code ngăn chương trình chạy hoặc biên dịch chính xác. Các thông báo này thường bao gồm thông tin về tệp và số dòng phát hiện lỗi, theo sau là mô tả về sự cố.

    Ví dụ:

    test.cpp: In function 'int main()':
    test.cpp:6:5: error: 'cout' was not declared in this scope
         cout << "Hello World!";
         ^~~~
  • Thông báo cảnh báo: Thông báo cho bạn về các sự cố tiềm ẩn hoặc các hoạt động lập trình rủi ro có thể không nhất thiết gây ra lỗi nhưng có thể dẫn đến các sự cố sau này. Giống như thông báo lỗi, thông báo cảnh báo thường bao gồm thông tin về tệp và số dòng nơi tìm thấy sự cố, cùng với mô tả sự cố.

    Ví dụ:

    test.cpp: In function 'int main()':
    test.cpp:6:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if (a < size)
                  ^
  • Thông báo thông tin: Cung cấp thông tin chung về việc thực hiện chương trình, chẳng hạn như điểm ngắt, điểm theo dõi và giá trị biến. Các thông báo này cũng có thể tiết lộ trạng thái hiện tại của chương trình, bao gồm ngăn xếp cuộc gọi và danh sách các luồng đang hoạt động.

    Ví dụ (giả sử bạn đang sử dụng GDB làm trình gỡ lỗi):

    (gdb) break main
    Breakpoint 1 at 0x40055f: file test.cpp, line 5.
    (gdb) run
    Starting program: /path/to/test
    Breakpoint 1, main () at test.cpp:5
    5       int a = 5;

Ví dụ mã code

Để sử dụng thông báo trình gỡ lỗi, bạn cần sử dụng trình gỡ lỗi, chẳng hạn như GDB hoặc Trình gỡ lỗi Visual Studio và bao gồm các cờ cụ thể trong quá trình biên dịch.

Ví dụ sử dụng GDB:

// test.cpp
 
#include <iostream>
using namespace std;
 
int main() {
    int num1 = 10;
    int num2 = 0;
    int result = num1 / num2;
 
    cout << "Result: " << result << endl;
 
    return 0;
}
$ g++ -g -o test test.cpp  // Biên dịch với cờ -g để bao hàm thông tin gỡ lỗi information
$ gdb ./test               // Chạy trình gỡ lỗi GDB
(gdb) run                  // Thực thi chương trình bên trong GDB

Tại điểm này, trình gỡ lỗi sẽ hiển thị thông báo lỗi được kích hoạt bởi phép chia cho 0:

Program received signal SIGFPE, Arithmetic exception.
0x00005555555546fb in main () at test.cpp:7
7       int result = num1 / num2;

Giờ đây, bạn có thể thực hiện các thay đổi phù hợp để khắc phục sự cố trong mã code C++ của mình.