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.