2008-10-02 25 views
25

Tôi khá chắc chắn rằng tôi đã thấy điều này trước đây, nhưng tôi đã không tìm ra/nhớ làm thế nào để làm điều đó. Tôi muốn có một dòng mã mà khi thực hiện từ trình gỡ lỗi Delphi tôi muốn trình gỡ lỗi bật lên như có một điểm ngắt trên dòng đó.Làm thế nào để mô phỏng điểm ngắt Delphi trong mã?

Cái gì như:

FooBar := Foo(Bar); 
SimulateBreakPoint; // Cause break point to occur in Delphi IDE if attached 
WriteLn('Value: ' + FooBar); 

Hy vọng rằng có ý nghĩa. Tôi biết tôi có thể sử dụng một ngoại lệ, nhưng điều đó sẽ có rất nhiều chi phí mà tôi muốn. Nó dành cho một số mã trình diễn.

Cảm ơn trước!

Trả lời

37

Để kích hoạt các chương trình gỡ rối từ mã (được cho là, tôi không có một bản sao của delphi tiện dụng để thử):

asm int 3 end; 

Xem trang này:

http://17slon.com/blogs/gabr/2008/03/debugging-with-lazy-breakpoints.html

+0

Đó là nó. Làm việc tuyệt vời! Cảm ơn! Bây giờ tôi cần tìm cách di chuyển lên ngăn xếp cuộc gọi cho điểm ngắt. . . . –

+0

Cẩn thận để bắt EExternal khác sẽ có một ngoại lệ bên ngoài trong khi chạy bên ngoài của trình gỡ rối. –

+2

Hoặc, như tôi đã đề xuất: nếu DebugHook <> 0 thì asm int 3 end; – gabr

13

Như Andreas Hausladen nêu trong ý kiến ​​cho rằng artice, Win32 API DebugBreak() chức năng là ít DOS-ish và hoạt động tốt như nhau.

+10

DebugBreak() đặt điểm ngắt trong cửa sổ gỡ lỗi/CPU. Tôi muốn có nó trong mã của tôi. –

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