GDB - Chương trình gỡ lỗi
Bắt đầu: Bắt đầu và Dừng
gcc -g myprogram.c
Biên dịch myprogram.c với tùy chọn gỡ lỗi (-g). Bạn vẫn nhận được a.out, nhưng nó chứa thông tin gỡ lỗi cho phép bạn sử dụng các biến và tên hàm bên trong GDB, thay vì vị trí bộ nhớ thô (không thú vị).
gdb a.out
Mở GDB với tệp a.out, nhưng không chạy chương trình. Bạn sẽ thấy một lời nhắc (gdb) - tất cả các ví dụ đều từ lời nhắc này.
r
r arg1 arg2
r <file1
Ba cách để chạy “a.out”, đã được tải trước đó. Bạn có thể chạy nó trực tiếp (r), truyền đối số (r arg1 arg2) hoặc nguồn cấp dữ liệu trong một tệp. Bạn thường sẽ đặt các điểm ngắt trước khi chạy.
help
điểm ngắt h
Liệt kê các chủ đề trợ giúp (trợ giúp) hoặc nhận trợ giúp về một chủ đề cụ thể (điểm ngắt h). GDB được ghi chép đầy đủ.
q - Thoát GDB
Bước qua Mã
Bước cho phép bạn theo dõi đường dẫn chương trình của mình và truy cập mã bị lỗi hoặc trả về đầu vào không hợp lệ.
l
l 50
tôi có chức năng
Liệt kê 10 dòng mã nguồn cho dòng hiện tại (l), một dòng cụ thể (l 50) hoặc cho một chức năng (l my Chức năng).
kế tiếp
Chạy chương trình cho đến dòng tiếp theo, sau đó tạm dừng. Nếu dòng hiện tại là một hàm, nó thực thi toàn bộ hàm, sau đó tạm dừng.next rất tốt cho việc xem qua mã của bạn một cách nhanh chóng.
bươc
Chạy lệnh tiếp theo, không chạy dòng. Nếu lệnh hiện tại đang thiết lập một biến, nó giống nhưnext. Nếu đó là một hàm, nó sẽ nhảy vào hàm, thực hiện câu lệnh đầu tiên, sau đó tạm dừng.step rất tốt cho việc tìm hiểu chi tiết về mã của bạn.
hoàn thành
Kết thúc việc thực thi chức năng hiện tại, sau đó tạm dừng (còn gọi là bước ra ngoài). Hữu ích nếu bạn vô tình bước vào một chức năng.
Điểm ngắt hoặc Điểm theo dõi
Các điểm ngắt đóng một vai trò quan trọng trong việc gỡ lỗi. Họ tạm dừng (ngắt) một chương trình khi nó đạt đến một điểm nhất định. Bạn có thể kiểm tra và thay đổi các biến và tiếp tục thực thi. Điều này rất hữu ích khi một số lỗi đầu vào xảy ra hoặc đầu vào phải được kiểm tra.
nghỉ 45
phá vỡ chức năng của tôi
- Đặt một điểm ngắt ở dòng 45 hoặc tại chức năng của tôi. Chương trình sẽ tạm dừng khi nó đạt đến điểm ngắt.
xem x == 3
Đặt điểm theo dõi, điểm này sẽ tạm dừng chương trình khi điều kiện thay đổi (khi x == 3 thay đổi). Các điểm giám sát là tuyệt vời cho một số đầu vào nhất định (myPtr! = NULL) mà không cần phải ngắt mỗi lần gọi hàm.
tiếp tục
Tiếp tục thực thi sau khi bị tạm dừng bởi một điểm ngắt / điểm giám sát. Chương trình sẽ tiếp tục cho đến khi nó chạm đến điểm ngắt / điểm theo dõi tiếp theo.
xóa N
- Xóa điểm ngắt N (các điểm ngắt được đánh số khi được tạo).
Đặt biến
Xem và thay đổi các biến trong thời gian chạy là một phần quan trọng của gỡ lỗi. Thử cung cấp đầu vào không hợp lệ cho các chức năng hoặc chạy các trường hợp thử nghiệm khác để tìm ra nguyên nhân gốc rễ của sự cố. Thông thường, bạn sẽ xem / đặt các biến khi chương trình bị tạm dừng.
in x
In giá trị hiện tại của biến x. Có thể sử dụng các tên biến ban đầu là lý do tại sao cờ (-g) là cần thiết; các chương trình được biên soạn thường xuyên có thông tin này bị loại bỏ.
đặt x = 3
đặt x = y
- Đặt x thành một giá trị đã đặt (3) hoặc cho một biến khác (y)
gọi my Chức năng ()
gọi hàm myother (x)
gọi strlen (mystring)
Gọi các chức năng hệ thống hoặc do người dùng xác định. Điều này cực kỳ hữu ích, nhưng hãy cẩn thận khi gọi các hàm lỗi.
hiển thị x
Liên tục hiển thị giá trị của biến x, được hiển thị sau mỗi bước hoặc khi tạm dừng. Hữu ích nếu bạn liên tục kiểm tra một giá trị nhất định.
undisplay x
- Loại bỏ hiển thị liên tục của một biến được hiển thị bằng lệnh hiển thị.
Backtrace và thay đổi khung
Ngăn xếp là danh sách các lệnh gọi hàm hiện tại - nó cho bạn biết bạn đang ở đâu trong chương trình. Một khung lưu trữ chi tiết của một lệnh gọi hàm đơn lẻ, chẳng hạn như các đối số.
bt
Backtraceshoặc in ngăn xếp chức năng hiện tại để hiển thị bạn đang ở đâu trong chương trình hiện tại. Nếu hàm chính gọi hàm a (), gọi b (), gọi c (), dấu lùi là
c <= current location
b
a
main
up
xuống
Di chuyển đến khung tiếp theo lên hoặc xuống trong ngăn xếp hàm. Nếu bạn đang ởc, bạn có thể chuyển đến b hoặc là a để kiểm tra các biến cục bộ.
trở về
- Trả về từ chức năng hiện tại.
Xử lý tín hiệu
Tín hiệu là các thông báo được đưa ra sau các sự kiện nhất định, chẳng hạn như bộ đếm thời gian hoặc lỗi. GDB có thể tạm dừng khi gặp tín hiệu; thay vào đó bạn có thể muốn bỏ qua chúng.
xử lý [signalname] [action]
xử lý SIGUSR1 nostop
xử lý mã số SIGUSR1
xử lý SIGUSR1 bỏ qua
Hướng dẫn GDB bỏ qua một tín hiệu nhất định (SIGUSR1) khi nó xảy ra. Có nhiều mức độ phớt lờ khác nhau.