2011-01-12 44 views
24

Tôi đã tìm tài liệu về điều này và không tìm thấy gì. Tôi đã cài đặt MinGW và nó hoạt động rất tốt. Tôi chỉ không biết cách sử dụng trình gỡ lỗi.Làm cách nào để sử dụng trình gỡ lỗi gdb MinGW để gỡ lỗi chương trình C++ trong Windows?

Với một số mã đơn giản, nói trong một tập tin gọi là "mycode.cpp":

int main() 
{ 
    int temp = 0; 

    for (int i = 0; i < 5; ++i) 
     temp += i; 

    return 0; 
} 

... làm thế nào tôi sẽ gỡ lỗi này. Các lệnh mà tôi sử dụng để gỡ lỗi mã với MinGW và GDB trong cửa sổ là gì? Tôi có thể bước qua mã thông qua dòng lệnh như trong Visual Studio? Nếu vậy tôi sử dụng lệnh nào để làm điều đó?

Có hướng dẫn nào để sử dụng GDB không? Tôi không thể tìm thấy bất kỳ thứ gì, nhưng nếu có ai đó có thể dẫn tôi đến một nơi tuyệt vời. Tôi đang mệt mỏi vì viết tấn câu lệnh std::cout để gỡ lỗi mã phức tạp.

Trả lời

37

Bước đầu tiên là để biên dịch chương trình của bạn với -g để bao gồm thông tin gỡ lỗi trong thực thi:

g++ -g -o myprog.exe mycode.cpp 

Sau đó, chương trình có thể được nạp vào gdb:

gdb myprog.exe 

Một vài lệnh để có được bạn đã bắt đầu:

  • break main sẽ khiến trình gỡ lỗi bị ngắt khi gọi main. Bạn cũng có thể chia nhỏ các dòng mã với break FILENAME:LINENO. Ví dụ: break mycode.cpp:4 ngắt kết nối thực thi bất cứ khi nào chương trình đạt đến dòng 4 của mycode.cpp.
  • start bắt đầu chương trình. Trong trường hợp của bạn, bạn cần phải thiết lập các điểm ngắt trước khi bắt đầu chương trình vì nó thoát ra nhanh chóng.

Tại một breakpoint:

  • print VARNAME. Đó là cách bạn in các giá trị của các biến, cho dù là cục bộ, tĩnh hay toàn cục. Ví dụ: tại vòng lặp for, bạn có thể nhập print temp để in giá trị của biến số temp.
  • step Điều này tương đương với "bước vào".
  • next hoặc adv +1 Chuyển đến dòng tiếp theo (như "bước qua"). Bạn cũng có thể chuyển đến một dòng cụ thể của một tệp cụ thể, ví dụ: adv mycode.cpp:8.
  • bt In dấu phẩy. Đây là một dấu vết ngăn xếp, về cơ bản.
  • continue Chính xác như hoạt động "tiếp tục" của trình gỡ lỗi trực quan. Nó làm cho chương trình thực hiện tiếp tục cho đến khi điểm ngắt tiếp theo hoặc thoát khỏi chương trình.

Điều tốt nhất để đọc là GDB users' manual.

+2

Một vài lệnh hơn bạn nên làm quen với: 'run',' CONTINUE', 'tiếp theo ',' list' và 'help'. Khi thất bại, hãy thử sử dụng 'help'. –

+0

Cảm ơn. Chính xác những gì tôi cần. –

+0

đã thử 'g ++ -g helloworld.c', nó chỉ tạo ra a.exe. Nó được cho là tạo ra một số tập tin khác để giúp gỡ rối với gdb. Chạy 'gdb a.exe' đưa ra thông báo:' không ở định dạng có thể thực thi: Định dạng tệp không được nhận dạng' và khởi động dấu nhắc lệnh '(gdb)'. Chạy '(gdb) main break' cho' No symbol table được nạp. Sử dụng lệnh "tệp". Chạy '(gdb) start' cho cùng một' Không có bảng biểu tượng nào được nạp. Sử dụng lệnh "tệp". Tôi đang làm gì sai? – Mahesha999

Các vấn đề liên quan