2010-06-21 24 views
9

RedGate có error reporting tool nói rằng nó có thểGiá trị của các biến cục bộ trong C# sau ngoại lệ?

"Nhận một trạng thái hoàn toàn của chương trình của bạn khi nó bị rơi (không chỉ ngăn xếp dấu vết), bao gồm các giá trị của biến khi vụ tai nạn xảy ra - không phải quay lại và đi lại trong số cuộc hội thoại qua email không hiệu quả với người dùng cuối ".

Tôi đã xây dựng một công cụ báo cáo ngoại lệ chưa được xử lý các ứng dụng của chúng tôi, nhưng tôi không thể tưởng tượng cách chúng nhận được nhiều thông tin theo dõi ngăn xếp trong mã sản xuất.

Có ai có ý tưởng nào không?

Trả lời

13

Có vẻ như những gì họ làm là họ viết lại bản lắp ráp của bạn và thêm khối try/catch vào mọi phương thức (ngoại trừ những thứ bạn loại trừ cụ thể). Việc nắm bắt được giá trị của tất cả các biến địa phương.Vì vậy, nếu tôi đã có mã số:

private int Add(int o1, int o2) { 
    return o1+o2; 
} 

Nó sẽ sửa đổi nó trở thành một cái gì đó như:

private int Add(int o1, int o2) { 
    int ret = 0; 
    try { 
    ret = o1+o2; 
    } 
    catch (Exception e) { 
    SpecialExceptionHandler.HandleException(e, new object[]{o1, o2}); 
    } 
    return ret; 
} 

Khá phức tạp ... Vì vậy, nó sẽ hiển thị giá trị của các thông số và người dân địa phương LÚC ngoại lệ xảy ra.

+0

Điều đó thực sự tuyệt vời. Tôi nghĩ rằng cơ chế nên được bằng cách nào đó xây dựng vào. NET, có thể thông qua các thuộc tính tùy chọn (Post #?). – Grozz

+0

Các hội đồng không có tên biến cục bộ. Biết rằng var1 là foo và var2 là thanh không phải lúc nào cũng hữu ích. –

-1

Biến cục bộ được lưu trữ trên ngăn xếp (giống như cách tham số).

+3

Trừ khi không. Các biến và tham số cục bộ thường được đăng ký. –

5

Vâng, nó có nói số địa phương biến không? Nó không nói như vậy trong phần bạn đã trích dẫn. Tôi nghi ngờ nó có một đống đống và cho phép bạn kiểm tra các biến tĩnh và dụ. Có nói rằng, tôi giả sử rằng họ có thể cài đặt một số loại trình xử lý lỗi toàn cục (có các bộ lọc ngoại lệ thực thi ngay cả trước khi bắt hoặc cuối cùng) lấy nội dung của ngăn xếp bằng mã gốc. Điều đó có thể cho phép truy cập vào các biến cục bộ.

Về cơ bản, nếu nó quản lý để lấy ngăn xếp trước khi đó là unwound (tuy nhiên họ làm như vậy) họ có thể nhận được tại các biến địa phương của bạn. Nếu mã RedGate chỉ được tham gia khi nó được lên cấp cao nhất, tôi nghi ngờ nó sẽ chỉ là giá trị đống.

Bạn đã thử sản phẩm cho chính mình chưa? Bạn có thể liên kết với nó không?

+0

Một trích dẫn khác: "Nhưng báo cáo ngoại lệ chi tiết này không chỉ là dấu vết ngăn xếp: nó cung cấp cho bạn các giá trị của tất cả các biến liên quan đến cuộc gọi không thành công". (http://www.red-gate.com/products/smartassembly/walkthrough_error_reporting.htm) – ConsultUtah

+0

@consultutah: Nó không thực sự rõ ràng từ các ảnh chụp màn hình những gì họ có ý nghĩa. Tại sao không chỉ lấy bản dùng thử miễn phí và xem? –

+0

Chỉ cần xác minh. Nó nhận được các giá trị của các tham số và người dân địa phương. Tôi đã tìm ra cách bây giờ và không thực sự thích nó. Tôi sẽ đăng câu trả lời trong một phút. – ConsultUtah

0

Có thể họ đang dùng bãi chứa sự cố, bao gồm toàn bộ bộ nhớ chương trình và tất cả giá trị đăng ký cùng với lượng siêu dữ liệu phong phú. Điều này thực sự cho phép bạn khôi phục mọi thứ về trạng thái chương trình của bạn khi chương trình bị lỗi.

0

Tôi không biết RedGate đang làm như thế nào, nhưng Visual Studio 2010 đã giới thiệu một tính năng mới có tên là IntelliTrace có gì đó tương tự ...... có thể dựa trên điều đó?

2

Họ không nói về ngoại lệ xử lý nhưng về điều gì đó xen vào điểm ngoại lệ là ném.

+0

điểm tốt - Tôi sẽ chỉnh sửa ở trên. – ConsultUtah

0

Tôi không biết chi tiết, nhưng Microsoft cung cấp các API gỡ lỗi và một DLL gỡ lỗi đặc biệt được gọi là SOS cho các chương trình .NET. Có lẽ RedGate đang sử dụng các API gỡ rối như vậy để kiểm tra các biến cục bộ và các "root" khác của chương trình. Về mặt lý thuyết, về mặt lý thuyết có thể sử dụng các API gỡ lỗi để nắm bắt trạng thái của tất cả các đối tượng tồn tại vào thời điểm khi một ngoại lệ/sự cố được phát hiện là không được giải quyết.

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