Review: madExcept - Delphi Crash / Exception Handling with Bug Reporting

of 10

What is madExcept?

madExcept Exception Dialog
madExcept Exception Dialog.

madExcept was built to help you locating crashes in your Delphi application. Whenever there's a crash/exception in your program, madExcept will automatically catch it, analyze it, collect lots of useful information, and give the end user the possibility to send you a full bug report.

No program is bug-free!

Yes, even the one that you write is prone to bugs. Sooner or later, as the program grows, a user of your application will call you saying something like: "there's a dialog saying something about some 'access violation' - the application then crashed, what should we do?"

Uh, what to do? Of course, the program runs perfectly when you work with it - but users are "beasts" they tend to use the applications we (programmers) develop in various (strange) ways. To help such a user you'll want to have as detailed bug report provided by the user as possible, this is where you should start looking inside the madExcept...

of 10

madExcept Features

madExcept Error Message Customizations
madExcept Error Message Customizations.

After you install madExcept it will integrate inside the Delphi IDE.

In order to integrate madExcept into a project open the project in Delphi. Then in Delphi's "Project" menu enter the madExcept settings and enable madExcept there. Now the only thing left is to recompile your project. After the successful recompile madExcept is fully integrated into your project.

madExcept features:

  • no need to distribute additional files, cause madExcept is fully linked into your executable,
  • the size of your executable file grows only by some percent (usually single digit),
  • you don't need to change a single line of code in your project,
  • there's no performance loss, as long as no exception occurs,
  • full support for multi threaded applications,
  • full support for third party translation tools,
  • full support for third party protection/compression tools,
  • email, web upload and printing functionality included,
  • free for non-commercial usage, inexpensive for commercial usage.
of 10

Actions on Exception

madExcept Actions On Exception
madExcept Actions On Exception.
The menu item "madExcept settings..." is added to the "Project" menu. This menu item opens a settings dialog with which you can configure madExcept's settings for the current project, including the layout of the exception box, your email address and much more. The settings are saved per project in the text file "projectName.mes" in the project's root folder.

Note: click the image to enlarge

of 10

Exception Filtering

madExcept Filtering Exception
madExcept Filtering Exception.
Note: click the image to enlarge
of 10

Exception Assistant Creator

madExcept Assistant Creator
madExcept Assistant Creator.
Each project has its own options. They're saved in the file "projectName.mes" (mes stands for madExceptSettings) in the project's root folder.

Apart from the private options of each project there are also the default options, which will be used for each new project. You can set the default options at any time by checking the Default check button at the bottom of the dialog. The default settings are stored in the registry.

Note: click the image to enlarge

of 10

Email Bug Report Settings

madExcept Email Bug Report Settings
madExcept Email Bug Report Settings.
The usual customer doesn't really want to read madExcept's detailed bug report. He just wants to send the bug report to the programmer, hoping that this will lead to a corrected new version. So in the default settings madExcept's box doesn't show any exception information, not even the exception message itself. The customer can just mail the bug report, or he can continue, restart or close the application.

Note: click the image to enlarge

of 10

Bug Report Details

madExcept Bug Report Settings / Details
madExcept Bug Report Settings / Details.

Note: click the image to enlarge

of 10

Upon Exception

madExcept Upon Exception
madExcept Upon Exception.

Note: click the image to enlarge

of 10

On what Code Line the Exception is, the Question is now? Show me the Call Stack!

Exception Source Code Line
Exception Source Code Line.
Note: double clicking a callstack line will make the Delphi editor jump to the specified unit and line number!

Note: click the image to enlarge

of 10

madExcept Verdict...

madExcept Disassembler
madExcept Disassembler.
madExcept verdict in 3 characters: "Yes".

Should you try madExcept: YES!

Program stopped working?

Apart from pure exception handling madExcept does one more thing (if you want it to), namely checking whether the main thread is frozen or not. Sometimes your program doesn't react anymore, although no exception occured. That can happen e.g. if your main thread runs in an infinite loop or if there's a bug in the synchronization of multiple threads, with the result of a dead lock. Such a bug can be *very* difficult to find, because your program is just frozen, without showing an exception. But with madExcept the situation is not that hopeless anymore: If your main thread doesn't react on messages for a specified time, madExcept raises an exception in the context of the main thread. In the resulting bug report you can see what the main thread was doing exactly and also what all other threads were doing at that time. That should help a lot finding infinite loop and dead lock bugs.
mla apa chicago
Your Citation
Gajic, Zarko. "Review: madExcept - Delphi Crash / Exception Handling with Bug Reporting." ThoughtCo, Feb. 16, 2016, Gajic, Zarko. (2016, February 16). Review: madExcept - Delphi Crash / Exception Handling with Bug Reporting. Retrieved from Gajic, Zarko. "Review: madExcept - Delphi Crash / Exception Handling with Bug Reporting." ThoughtCo. (accessed November 22, 2017).