Hello,
How to configure madExcept so that it reports (i.e. generate a bug report) ONLY for certain exception classes, for example EAccessViolation.
Thank you.
Christian Aymon
{$IFDEF USE_MADEXCEPT}
,MadExcept
{$ENDIF}
// handler used when MadExcept is active
procedure ExceptionHandler_MadExcept(const ExceptIntf : IMEException;
var Handled : boolean);
procedure TMainForm.ExceptionHandler_MadExcept(
const ExceptIntf: IMEException; var Handled: boolean);
begin
{$IFDEF USE_MADEXCEPT}
if ExceptIntf.ExceptObject is Exception then
ExceptionHandler(Exception(ExceptIntf.ExceptObject), Handled);
{$ENDIF}
end {TMainForm.ExceptionHandler_MadExcept};
{$IFDEF USE_MADEXCEPT}
RegisterExceptionHandler(ExceptionHandler_MadExcept, stTrySyncCallOnSuccess);
{$ENDIF}
procedure TMainForm.OnException(Sender: TObject; E: Exception);
var
Handled : boolean;
begin
Handled := false;
ExceptionHandler(E, Handled);
if not Handled then begin
E.Message := Format('%s (0x%s)', [E.Message, IntToHex(integer(ExceptAddr), 8)]);
Application.ShowException(E);
end {if};
end {TMainForm.OnException};
procedure TMainForm.ExceptionHandler(E: Exception; var Handled : boolean);
begin
Handled := true; // Assume
if E is EBeep then begin
MessageBeep(0)
end else if E is EOutOfMemory then begin
// ...
end else if E is EOLESysError then begin
// ...
end else if E is EInOutError then begin
with EInOutError(E) do
// ...
end else if E is ECheck then begin
//...
end else if E is EIOError then begin
with EIOError(E) do
//...
end else if E is EHotSpotError then begin
// ...
end else if E is EExecException then begin
// ...
end else if E is EError then begin
// ..
end else if E is EGenError then begin
// ...
end else begin
Handled := false;
end {if};
end {TMainForm.ExceptionHandler};
raise Exception.Create('Message for the user'); // Or *many* other exception classes
var
p : ^Byte;
begin
p := $0;
p^ := 0; // <---- triggers AV exception
Users browsing this forum: No registered users and 3 guests