2009-05-13 35 views
5

Đôi khi tôi tích lũy một khối lượng lớn các điểm ngắt từ các phiên gỡ lỗi khác nhau ở các vị trí khác nhau trong mã của tôi. Làm thế nào để trình gỡ rối biết hiệu quả khi nào dừng lại cho một điểm dừng? Nó không thể dừng lại ở mọi dòng đơn để kiểm tra số dòng và tên tệp nguồn dựa vào danh sách các điểm ngắt có khả năng dài, phải không?Điểm ngắt trình gỡ rối được triển khai hiệu quả như thế nào?

Đây là trình gỡ lỗi Java trong Eclipse, nhưng tôi cho rằng câu hỏi này áp dụng cho bất kỳ trình gỡ lỗi nào.

Trả lời

7

Chiến lược được sử dụng trong nhiều trình gỡ rối (tôi không biết về Eclipse) là đặt một bản vá vào mã tại điểm breakpoint về cơ bản là cuộc gọi chương trình con hoặc cuộc gọi hệ thống. Mã nhảy tới có thông tin điểm ngắt và thực hiện bất kỳ việc in hoặc chấp nhận lệnh người dùng nào và cũng có mã được ghi đè bằng bản vá, để mã có thể được thực hiện để thực thi khớp với mã ban đầu, không có điểm ngắt

+0

Man, đó là một số ma thuật hạng nặng. Tôi biết những kẻ buôn lậu đang làm một số điều sâu sắc, nhưng tôi không biết nó sâu đến thế! – skiphoppy

+2

Không nhất thiết phải gọi ngay cả. Nếu có thể, bạn ghi đè bằng một lệnh làm tăng ngắt, mà trình gỡ rối xử lý. –

5

để thêm vào câu trả lời tốt Nadreck của:

có một bài viết here với nhiều chi tiết, bao gồm một số những thứ kỳ lạ hơn (opcodes cụ thể về x86; breakpoint phần cứng).

2

Trình gỡ lỗi triển khai điểm ngắt trong phần cứng hoặc phần mềm. Sau này yêu cầu lưu lệnh gốc, chèn mã đặc biệt tạo ra một ngoại lệ và khi ngoại lệ được nâng lên, hãy thêm lại lệnh ban đầu và cho người dùng biết rằng điểm ngắt đã bị nhấn. Đọc my article để biết chi tiết đẫm máu về điểm ngắt phần mềm.

0

Bạn có thể nhận được đầy đủ các chi tiết của ruột của Eclipse Debugger và làm thế nào để viết một tại liên kết dưới đây How to write an Eclipse Debugger

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