Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // See also: http://pastebin.com/XWpyDuw6 - "how to silently process exception"
- // See also: http://pastebin.com/ACtr0r6S - "how to silently log exception"
- // See also: http://pastebin.com/QiicyV2E - "how to log all (handled) exceptions"
- // Option 1: use custom attributes
- // Read more about this method: http://www.eurekalog.com/help/eurekalog/customizing_custom_attributes.php
- // Option 1.A:
- uses
- EClasses,
- ETypes;
- type
- [EurekaLogHandler(fhtRTL)]
- ETestException = class(Exception);
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- // ETestException will be ignored by EurekaLog and
- // it always will be handled by your application
- // (as if EurekaLog would be disabled).
- // In other words, this will be catched by standard
- // Application.HandleException method.
- // A default MessageBox will be shown.
- raise ETestException.Create('Error Message');
- end;
- // Option 1.B:
- uses
- EClasses;
- type
- [EurekaLogExpected()]
- ETestException = class(Exception);
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- // ETestException will be handled by EurekaLog.
- // However, it would be considered as expected.
- // In other words, this will be catched and shown by EurekaLog.
- // But (EurekaLog) error dialog will lack
- // "details", "send" and "restart" options.
- raise ETestException.Create('Error Message');
- end;
- // Option 2: use filters
- // Read more about this method: http://www.eurekalog.com/help/eurekalog/customizing_filters.php
- // Usually you add exception filters at design-time here: http://www.eurekalog.com/help/eurekalog/exceptions_filters_page.php
- // However, you can also create filter manually:
- // Option 2.A:
- uses
- EModules;
- CurrentEurekaLogOptions.ExceptionsFilters.AddIgnoredException(ETestException);
- // ETestException will be ignored by EurekaLog and
- // it always will be handled by your application
- // (as if EurekaLog would be disabled).
- raise ETestException.Create('Error Message');
- // Option 2.B:
- uses
- EModules;
- CurrentEurekaLogOptions.ExceptionsFilters.AddExpectedException(ETestException);
- // ETestException will be handled by EurekaLog.
- // However, it would be considered as expected.
- // "details", "send" and "restart" options will not be shown.
- raise ETestException.Create('Error Message');
- // Option 2.C:
- uses
- EModules;
- CurrentEurekaLogOptions.ExceptionsFilters.AddFullyIgnoredException(ETestException);
- // ETestException will be handled by EurekaLog.
- // However, it would be considered as ignored.
- // No dialog, no bug report, no sending.
- // Exception will act like EAbort.
- raise ETestException.Create('Error Message');
- // Option 2.D:
- uses
- EModules,
- ETypes;
- // Create custom filter:
- var
- Filter: TEurekaExceptionFilter;
- begin
- FillChar(Filter, SizeOf(Filter), 0);
- Filter.Active := True;
- Filter.ExceptionClassName := ETestException.ClassName;
- Filter.ExceptionType := fetAll;
- Filter.DialogType := edtUnchanged;
- Filter.HandlerType := fhtRTL;
- Filter.ActionType := fatUnchanged;
- CurrentEurekaLogOptions.ExceptionsFilters.Add(Filter);
- // ETestException will be ignored by EurekaLog and
- // it always will be handled by your application
- // (as if EurekaLog would be disabled).
- raise ETestException.Create('Error Message');
- end;
- // Option 3: use event handlers
- // Read more about this method: http://www.eurekalog.com/help/eurekalog/customizing_events.php
- // Option 3.A:
- uses
- EEvents,
- EException,
- ETypes;
- type
- ETestException = class(Exception);
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- // ETestException will be ignored by EurekaLog and
- // it always will be handled by your application
- // (as if EurekaLog would be disabled).
- raise ETestException.Create('Error Message');
- end;
- procedure ExceptionNotify(const ACustom: Pointer; AExceptionInfo: TEurekaExceptionInfo; var AHandle: Boolean; var ACallNextHandler: Boolean);
- begin
- // Specify EurekaLog to ignore ETestException
- if AExceptionInfo.ExceptionClass = ETestException.ClassName then // <- this check matches ETestException only, but skips child classes
- begin
- AHandle := False;
- ACallNextHandler := False;
- Exit;
- end;
- end;
- initialization
- RegisterEventExceptionNotify(nil, ExceptionNotify);
- end.
- // Option 3.B:
- uses
- EEvents,
- EException,
- ETypes;
- type
- ETestException = class(Exception);
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- // ETestException will be handled by EurekaLog.
- // However, it would be considered as expected.
- // "details", "send" and "restart" options will not be shown.
- raise ETestException.Create('Error Message');
- end;
- procedure ExceptionNotify(const ACustom: Pointer; AExceptionInfo: TEurekaExceptionInfo; var AHandle: Boolean; var ACallNextHandler: Boolean);
- begin
- // Mark exception as expected, but allow it to be handled by EurekaLog.
- if (AExceptionInfo.ExceptionObject <> nil) and
- (AExceptionInfo.ExceptionNative) and
- (Exception(AExceptionInfo.ExceptionObject).InheritsFrom(ETestException)) and // <- this check matches ETestException and any of its child classes
- (AExceptionInfo.ExceptionMessage = 'Error Message') then
- begin
- AExceptionInfo.ExpectedContext := -1;
- Exit;
- end;
- end;
- initialization
- RegisterEventExceptionNotify(nil, ExceptionNotify);
- end.
- // Additional note:
- // Here is a way to check additional properties of your exception:
- procedure ExceptionNotify(const ACustom: Pointer; AExceptionInfo: TEurekaExceptionInfo; var AHandle: Boolean; var ACallNextHandler: Boolean);
- begin
- if (AExceptionInfo.ExceptionObject <> nil) and // check that there is exception object
- (AExceptionInfo.ExceptionNative) and // check that it is a Delphi/Builder object
- (Exception(AExceptionInfo.ExceptionObject).InheritsFrom(EOSError)) and // check exception class
- (EOSError(AExceptionInfo.ExceptionObject).ErrorCode = ERROR_ACCESS_DENIED) and // check any additional exception properties
- (AExceptionInfo.CallStack.Count > 0) and
- (AExceptionInfo.CallStack[0].Location.UnitName = 'ServiceProvider') and
- (AExceptionInfo.CallStack[0].Location.ProcedureName = 'Connect') then
- begin
- AExceptionInfo.ExpectedContext := -1;
- Exit;
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement