2008-11-13 16 views
17

Lớp ngoại lệ trong Delphi 2009 nhận được một số tính năng mới. Một số trong số họ có liên quan để nhận được một stacktrace:Lấy một Stacktrace ở Delphi 2009

  • tài sản StackTrace: chuỗiđọc GetStackTrace;
  • thuộc tính StackInfo: Pointer đọc FStackInfo;
  • lớp var GetExceptionStackInfoProc: chức năng (P: PExceptionRecord): Con trỏ;
  • lớp var GetStackInfoStringProc: chức năng (Thông tin: Pointer): chuỗi;
  • lớp var CleanUpStackInfoProc: quy trình (Thông tin: Con trỏ);

Có ai đã sử dụng những thứ này để lấy dấu vết ngăn xếp chưa? Vâng, tôi biết có những cách khác để có được một dấu vết ngăn xếp, nhưng nếu nó được hỗ trợ nguyên bản trong lớp Exception tôi thà tận dụng điều đó.

Cập nhật: Có lãi blog post about this. Bao gồm nó trong rất nhiều chiều sâu.

Trả lời

8

Đối với tôi, điều này trông giống như một khung nơi bạn có thể cắm theo dõi ngăn xếp của riêng mình. Tôi đoán điều này có thể được sử dụng trong nội bộ trong IDE với JCLDebug. Có lẽ nó dành cho người dùng để có thể cung cấp madExcept hoặc triển khai khác.

+1

Bạn đúng 100%. Các tính năng mới này dành cho khung công tác ngoại lệ của bên thứ ba. Bây giờ, có một cách làm tài liệu để làm một số công việc thay vì sử dụng hack và hooking. Plus, trường FStackInfo rất có giá trị cho phép kết hợp ngoại lệ với các thông tin khác, xuất phát từ công cụ truy tìm ngoại lệ (cuối cùng!). – Alex

2

Không, tôi chưa sử dụng chúng (hiện đang sử dụng madExcept cho điều đó và cũng đã thực hiện một số thử nghiệm với JclDebug) - nhưng cảm ơn mẹo!

2

TOndrej là chính xác. Các tính năng mới được thêm vào lớp Ngoại lệ là dành cho các bên thứ ba móc mã theo dõi ngăn xếp của riêng họ vào RTL. Việc thực thi mặc định của lớp Exception không tạo ra các dấu vết ngăn xếp của chính nó.

2

Bạn sẽ được khuyên nên xem xét MadExcept. Nó không chỉ cung cấp xử lý tuyệt vời của bất kỳ trường hợp ngoại lệ unhandled (lấy màn hình, email, vv) nhưng nó có một bộ tốt đẹp của thói quen gọi để đưa bạn trở lại một dấu vết ngăn xếp mà bạn có thể sử dụng hầu như bất cứ nơi nào. Bri