<p><a href="http://www.madshi.net/madExceptDescription.htm" data-component="link" data-source="inlineLink" data-type="externalLink" data-ordinal="1" rel="nofollow">madExcept</a> was built to help you locating crashes in your Delphi application. Whenever there&#39;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.</p><h3>No program is bug-free!</h3>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: &#34;<i>there&#39;s a dialog saying something about some &#39;access violation&#39; - the application then crashed, what should we do?</i>&#34;<p>Uh, what to do? Of course, the program runs perfectly when you work with it - but users are &#34;beasts&#34; they tend to use the applications we (programmers) develop in various (strange) ways. To help such a user you&#39;ll want to have as detailed bug report provided by the user as possible, this is where you should start looking inside the madExcept...</p><p>After you install madExcept it will integrate inside the Delphi IDE.</p><p>In order to integrate madExcept into a project open the project in Delphi. Then in Delphi&#39;s &#34;Project&#34; 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.</p><p>madExcept features:</p><ul><li>no need to distribute additional files, cause madExcept is fully linked into your executable, </li><li>the size of your executable file grows only by some percent (usually single digit), </li><li>you don&#39;t need to change a single line of code in your project,</li><li>there&#39;s no performance loss, as long as no exception occurs,</li><li>full support for multi threaded applications,</li><li>full support for third party translation tools,</li><li>full support for third party protection/compression tools,</li><li>email, web upload and printing functionality included,</li><li> free for non-commercial usage, inexpensive for commercial usage.</li></ul>The menu item &#34;madExcept settings...&#34; is added to the &#34;Project&#34; menu. This menu item opens a settings dialog with which you can configure madExcept&#39;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 &#34;projectName.mes&#34; in the project&#39;s root folder.<p>Note: click the image to enlarge</p>Note: click the image to enlargeEach project has its own options. They&#39;re saved in the file &#34;projectName.mes&#34; (mes stands for madExceptSettings) in the project&#39;s root folder.<p>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.</p><p>Note: click the image to enlarge</p>The usual customer doesn&#39;t really want to read madExcept&#39;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&#39;s box doesn&#39;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.<p>Note: click the image to enlarge</p><p>Note: click the image to enlarge</p><p>Note: click the image to enlarge</p>Note: double clicking a callstack line will make the Delphi editor jump to the specified unit and line number!<p>Note: click the image to enlarge</p>madExcept verdict in 3 characters: &#34;Yes&#34;.<p>Should you try madExcept: YES!</p><h3>Program stopped working?</h3>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&#39;t react anymore, although no exception occured. That can happen e.g. if your main thread runs in an infinite loop or if there&#39;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&#39;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.