2009-09-12 26 views
8

Từ bên trong một khối cuối cùng, có thể nói một ngoại lệ đã được nêu ra không?Làm cách nào để biết tôi có đang ở trong ngăn xếp ngoại lệ Delphi không?

+0

Bạn có hỏi liệu bạn có đang e trong khối 'finally' * vì * một ngoại lệ đã được nâng lên, hoặc chỉ là có ngoại lệ * ở đâu đó * trong chương trình, chẳng hạn như khi bạn nhập một khối' try-finally' từ bên trong một phần 'except'? –

Trả lời

18

Bạn có thể kiểm tra xem ExceptObject hoặc ExceptAddr được giao . Trong nguồn VCL, điều này được thực hiện để kiểm tra. trong GIFImg.pas hoặc jpeg.pas.

Các mã sau đây nên sản lượng

ExceptObject <> nil
ExceptObject = nil

và nếu bạn loại bỏ các ngoại lệ thì tất nhiên

ExceptObject = nil
ExceptObject = nil

try 
    try 
     raise Exception.Create('Just an exception'); 
    finally 
     if ExceptObject <> nil then 
     WriteLn('ExceptObject <> nil') 
     else 
     WriteLn('ExceptObject = nil'); 
    end; 
    except 

    end; 
    if ExceptObject <> nil then 
    WriteLn('ExceptObject <> nil') 
    else 
    WriteLn('ExceptObject = nil'); 
+4

Xin chào, rất vui được gặp bạn ở đây! –

3

Đây là loại hack, nhưng bạn có thể thử gọi AcquireExceptionObject. Nếu bạn ở trạng thái ngoại lệ, bạn sẽ nhận được một giá trị trả về, nếu không bạn sẽ nhận được số không.

(. Nếu bạn đã có được một, hãy chắc chắn để gọi ReleaseExceptionObject sau)

2

AFAIK này chỉ có thể đạt được với tuyên bố thử lồng nhau:

Try 
    Try 
    ... 
    Except 
    ... 
    End; 
Finally 
    ... 
End 
Các vấn đề liên quan