2011-10-20 29 views
5

Tôi hiện đang phải viết các triển khai của malloc() và miễn phí(), và tôi được cung cấp một chương trình điều khiển sẽ chạy hai triển khai của tôi.GDB: Có lệnh nào cho phép bạn xem hàm được gọi bao nhiêu lần không?

Nhưng hiện tại, tôi đang phân đoạn vì miễn phí() đang cố gắng giải phóng kích thước tải trọng tốt hơn hàng tỷ byte (điều này sai). Tôi có số dòng và số dòng chạy GDB, nhưng tôi cần biết liệu malloc() và free() có được gọi nhiều lần không, để xác nhận rằng thực sự có ít nhất một trường hợp nơi nó chạy trơn tru.

+0

Vâng, tôi đoán tôi có thể tạo biến toàn cục trong chương trình làm bộ đếm ... và sau đó in trong GDB. Nhưng liệu có một phương pháp tốt hơn? –

Trả lời

1

(gdb) giúp ngắt
Đặt điểm ngắt tại dòng hoặc chức năng được chỉ định.
ngắt [LOCATION] [chủ đề THREADNUM] [nếu CONDITION]
VỊ TRÍ có thể là số dòng, tên hàm hoặc "*" và địa chỉ.
Nếu một số dòng được chỉ định, hãy ngắt ở đầu mã cho dòng đó.
Nếu hàm được chỉ định, hãy ngắt ở đầu mã cho hàm đó.
Nếu địa chỉ được chỉ định, hãy phá vỡ địa chỉ chính xác đó.
Không có LOCATION, sử dụng địa chỉ thực thi hiện tại của khung ngăn xếp đã chọn.
Điều này rất hữu ích khi vi phạm khi trở về khung ngăn xếp.

+0

Tài liệu về 'ngắt' thực sự tốt khi ghi lại' ngắt' nhưng không đủ trong trường hợp này :). Câu trả lời của Martin là câu trả lời cho bạn biết cách xem số lần truy cập được giữ bởi GDB – salicideblock

6

Trước tiên hãy đặt điểm ngắt cho malloc và miễn phí. Sau đó sử dụng lệnh "ignore" với giá trị cao để chặn đứng thực sự dừng tại các điểm ngắt đó. GDB sẽ vẫn tính số lần các điểm ngắt đã bị tấn công. Khi bạn gọi "điểm ngắt thông tin", GDB sẽ hiển thị cho bạn số lượng này.

2

Chỉ cần để hoàn thành các thông tin của Martin, chạy gdb và sau đó, trên dấu nhắc gdb:

b <file:line_number or function name> 
ignore <breakpoint identifier> 100000 

Sau đó, bạn chạy thực thi của bạn (hoặc bạn khởi động lại) và sau đó, khi bạn muốn kiểm tra số lượng thời điểm điểm ngắt được nhấn, trên dấu nhắc gdb:

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