2012-05-04 20 views
6

Tôi có một ứng dụng gần đây đã bị lỗi và tôi đã có thể nhận được callstack của mình bằng cách sử dụng EurekaLog. Những gì tôi nhận thấy là một đơn vị quyết toán được gọi nhưng ứng dụng không đóng và tiếp tục hoạt động.Khi nào phương thức hoàn thiện trong đơn vị được gọi?

AFAIK, phần cuối cùng chỉ được gọi khi ứng dụng chấm dứt. Nhưng đó không phải là những gì đã xảy ra với tôi.

Có ai biết lý do tại sao phương thức hoàn thành được gọi khi không được phép làm như vậy không?

EDIT

Ứng dụng này không sử dụng bất kỳ dlls hoặc bpls.

EDIT2

Có thể rằng a thread khi hoàn tất có thể gọi quyết toán?

+0

nhận xét dòng, xem sự cố vẫn tiếp diễn, nếu có, thì sự cố của bạn ở một nơi khác, nếu không, bạn phải cung cấp thêm thông tin về hàm, thường eureka là đúng ... – ComputerSaysNo

+0

tôi đang cố gắng tạo lại vấn đề trong gần 2 giờ và tôi không có gì cho đến nay. –

+1

Nếu bạn không thể tái tạo nó, thì câu hỏi này là vô nghĩa. 'finalization' xảy ra tại thời điểm kết thúc. –

Trả lời

4

Việc hoàn thành được gọi ở hai nơi. Phổ biến nhất là khi ứng dụng chấm dứt. Nhưng chúng cũng có thể được gọi khi một DLL (hoặc BPL) được giải phóng, điều này sẽ tự động xảy ra khi ứng dụng chấm dứt nhưng cũng có thể xảy ra ở giữa chương trình đang chạy nếu mã này dỡ bỏ nó một cách rõ ràng.

Có thể đó là những gì đang diễn ra?

+0

Nops. Ứng dụng này không sử dụng bất kỳ dll hoặc bpls. –

+6

Sau đó, hoặc bạn đã có một lỗi trong báo cáo EurekaLog chính nó, hoặc mã của bạn là sau một con trỏ chức năng bị hỏng một nơi nào đó và kết thúc trong một thói quen hoàn thiện. Bởi vì bạn không bao giờ kết thúc ở đó một cách hợp pháp trừ khi mô-đun của đơn vị sắp được dỡ xuống. –

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