Page 1 of 1

Register my own Exceptionhandler

Posted: Tue Jun 29, 2004 7:50 am
by AndreasLeix
I´m just checking out, wether I Should use MadExcept in our application.
I installed MadExcept and my first try was to place the exception-handler-
component on the main form, filled the two events, caused an exception
and everything worked fine.
Now I tried to register my own Exceptionhandler. I deleted the component
from the main form and used registerExceptionHandler ( ... );
Unfortunatly it was not called, when I raised an Exception.
Then I tried to check the default behaviour of MadExcept and did nothing
but set the settings under "Projekt, madExceptsettings...' and rebuild the application.
After rising an Exception the MadException-Box was not showed and
the exception was not catched.

What went wrong ?
Is there any problem with applications consisting of some runtime-packages and a main-exe ?

Posted: Tue Jun 29, 2004 7:19 pm
by madshi
If you want madExcept to catch exceptions in a exe + runtime bpl environment, you need to integrate madExcept into the exe project. You can do so by loading your exe project in Delphi, then in the project menu in the madExcept settings for your project by checking the option "handle exceptions" (enabling the option "append map file to binary" is also recommended).

Please note that the Delphi debugger shows exception first. Only afterwards madExcept gets into control. So if an exception occurs inside of the IDE, press F9 to continue the program, then you should see the madExcept box. Alternatively you can test it outside of the IDE.

Probleme mit umfangreicher Anwendung

Posted: Wed Jun 30, 2004 2:19 pm
by AndreasLeix
Ich bin genau so vorgegangen, wie Sie vorschlagen. Dennoch wird die
Fehlerbehandlung nicht aktiviert. ( auch ohne Debugger )
Ein Test mit einer Mini-Applikation hat funktioniert.
Nur die Aufnahme in unser reeles Projekt will nicht gelingen.
Im Debugger kann ich nachverfolgen, daß die Module von MadExcept bei Programmausführung auch geladen werden.
Das Projekt in das MadExcept integriert werden soll besteht ( neben den Delphi-Packages ) aus 17 Packages, 1 Main-EXE und 13 DLLs die zur Laufzeit "manuell" geladen werden.

Gibt es irgendwelche Compiler/Linker/Umgebungseinstellungen, die noch beachtet werden müssen ?
oder gibt es bestimmte Besonderheiten, wo die *.BPLs und *. DCPs liegen müssen ( außer natürlich, das der Compiler und das EXE die Dateien zur Entwurfszeit bzw Laufzeit überhaupt finden )
Ich habe MadExcept auf "D:\MAD\" installiert.

Ich denke da läuft nur irgend eine Winzigkeit falsch. Aber welche ?

Können sie mir helfen, daß wir MadExcept doch noch in unsere Anwendung integrieren können.

Posted: Wed Jun 30, 2004 2:52 pm
by madshi
madExcept muß sich in das Rtl70.bpl und Vcl70.bpl einklinken. Damit sind dann automatisch alle Module (exe + bpls), die auch Rtl70.bpl und Vcl70.bpl benutzen, von madExcept erfaßt. Allerdings werden Exceptions in Modulen, die nicht Rtl70.bpl und Vcl70.bpl benutzen, nicht automatisch von madExcept erfaßt. Die wichtigste Frage ist also: Ist das Exe auch mit Runtime-Packages übersetzt (vor allem Rtl + Vcl)? Und wo haben Sie denn die Test-Exception eingebaut?

Exe mit Laufzeitpackages

Posted: Thu Jul 01, 2004 2:39 pm
by AndreasLeix
Erstmal Antworten auf Ihre Fragen:
1) Das exe wird mit Laufzeitpackages compiliert.
2) "VCL" ist beim Exe in der Liste der Laufzeitpackages drin.
3) Zum Test habe ich im EXE eine Division duch Null ausgelößt.


Bin durch ausprobieren auf folgende Lösung gekommen:

Compiliere ich die MadExcept DCUs ins Exe direkt mit rein,
dann scheint alles zu funktionieren.

Nehme ich "MadExcept_" in die Liste der Laufzeitpackages des EXEs
auf, dann hängt sich MadExcept offenbar nicht in die Fehlerbehandlung ein.


Manuell aufgerufene Routinen aus dem Package ( z.B. CreateBugReport )
funktionieren in beiden Fällen.

Ich kann mit dieser Vorgehensweise ( direktes eincompilieren ins exe) leben.

Ist so eine Vorgehensweise im Sinne des Erfinders, oder sollte man
das anders machen ?

Habe ich das richtig verstanden :

Nur allein ins EXE muß MadExcept eincompiliert werden, alle verwendeten
BPLs und DLLs sind nur insofern betroffen, als daß das jeweilige MAP-File durch den Wizard oder durch MadExceptPatch.exe ins Compilat integriert werden muß, um im Bug-Report lesbare Stack-Ifo zu bekommen.


Ist es richtig, daß die Map-Info automatisch in verschlüsselter Form integriert wird ? ( Wäre uns unangenehm, wenn wir da Klartext rausgeben würden )

Re: Exe mit Laufzeitpackages

Posted: Thu Jul 01, 2004 3:17 pm
by madshi
AndreasLeix wrote:Bin durch ausprobieren auf folgende Lösung gekommen:

Compiliere ich die MadExcept DCUs ins Exe direkt mit rein,
dann scheint alles zu funktionieren.

Nehme ich "MadExcept_" in die Liste der Laufzeitpackages des EXEs
auf, dann hängt sich MadExcept offenbar nicht in die Fehlerbehandlung ein.
Stimmt! Hmmm... Beschwert sich madExcept nicht, wenn madExcept in der Liste der Runtime Packages steht? Sollte es eigentlich...

In einer zukünftigen Version wird madExcept wahrscheinlich auch als eigenständiges Runtime-Package funktionieren. Im Moment muß es ins Exe gelinkt werden.
AndreasLeix wrote:Ist so eine Vorgehensweise im Sinne des Erfinders, oder sollte man das anders machen ?
Genau ist es gedacht!
AndreasLeix wrote:Habe ich das richtig verstanden :

Nur allein ins EXE muß MadExcept eincompiliert werden, alle verwendeten
BPLs und DLLs sind nur insofern betroffen, als daß das jeweilige MAP-File durch den Wizard oder durch MadExceptPatch.exe ins Compilat integriert werden muß, um im Bug-Report lesbare Stack-Ifo zu bekommen.
Genau richtig verstanden.
AndreasLeix wrote:Ist es richtig, daß die Map-Info automatisch in verschlüsselter Form integriert wird ?
Ja, das ist richtig. Allerdings muß madExcept ja in der Lage sein, die Map-Infos wieder auszulesen. Von daher basiert die Verschlüsselung auf einem programm-generierten Paßwort, was natürlich nicht super-sicher ist.

In einer zukünftigen Version wird es eine Variante geben, in der madExcept nur mit minimalen Infos ausgeliefert wird. Das komplette Map-File verbleibt beim Programmierer. Die vom Kunden kommenden BugReports müssen dann aber durch ein kleines Tool nachbearbeitet werden (mithilfe des kompletten MapFiles), damit die Stacks lesbar werden. Aber wie gesagt, ist noch Zukunftsmusik.