Trang tài liệu
Khóa học C++ nền tảng
Chương 15. Trình gỡ lỗi
GDB: Trình gỡ lỗi GNU

GDB: Trình gỡ lỗi GNU

GDB, hay Trình gỡ lỗi dự án GNU, là một trình gỡ lỗi dòng lệnh mạnh được sử dụng chủ yếu cho C, C++ và các ngôn ngữ khác. Nó có thể giúp bạn tìm lỗi thời gian chạy, kiểm tra trạng thái thực thi của chương trình và điều khiển luồng để phát hiện và sửa lỗi một cách dễ dàng.

Bắt đầu với GDB

Để bắt đầu sử dụng GDB, trước tiên bạn cần biên dịch mã code của mình bằng cờ -g, bao gồm thông tin gỡ lỗi trong tệp thực thi:

g++ -g myfile.cpp -o myfile

Bây giờ, bạn có thể tải chương trình đã biên dịch của mình vào GDB:

gdb myfile

Các lệnh GDB cơ bản

Dưới đây là một số lệnh GDB phổ biến mà bạn sẽ thấy hữu ích khi gỡ lỗi:

  • run: Bắt đầu chương trình của bạn.
  • break [function/line number]: Đặt điểm dừng tại hàm hoặc dòng đã chỉ định.
  • continue: Tiếp tục thực hiện chương trình sau khi dừng tại breakpoint.
  • next: Thực thi dòng mã tiếp theo, bước qua các lệnh gọi hàm.
  • step: Thực thi dòng mã code tiếp theo, nhập các lời gọi hàm.
  • print [expression]: Đánh giá một biểu thức trong ngữ cảnh hiện tại và hiển thị giá trị của nó.
  • backtrace: Hiển thị ngăn xếp cuộc gọi hiện tại.
  • frame [frame-number]: Chuyển sang một khung ngăn xếp khác.
  • quit: Thoát khỏi GDB.

Ví dụ sử dụng

Giả sử bạn có một tệp cpp đơn giản có tên là example.cpp:

#include <iostream>
 
void my_function(int i) {
  std::cout << "In my_function with i = " << i << std::endl;
}
 
int main() {
  for (int i = 0; i < 5; ++i) {
    my_function(i);
  }
  return 0;
}

Đầu tiên, biên dịch mã code với các biểu tượng gỡ lỗi:

g++ -g example.cpp -o example

Bắt đầu GDB và tải chương trình example:

gdb example

Đặt điểm ngắt trong hàm my_function và chạy chương trình:

(gdb) break my_function
(gdb) run

Sau khi dừng tại điểm ngắt, hãy sử dụng next, print và continue kiểm tra trạng thái của chương trình:

(gdb) next
(gdb) print i
(gdb) continue

Cuối cùng, thoát GDB bằng lệnh quit.

Đây chỉ là một bản tóm tắt ngắn gọn về GDB; bạn có thể tìm thêm chi tiết trong hướng dẫn GDB chính thức.