Register my own Exceptionhandler

delphi package - automated exception handling
Post Reply
AndreasLeix
Posts: 3
Joined: Tue Jun 29, 2004 7:29 am
Contact:

Register my own Exceptionhandler

Post 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 ?
madshi
Site Admin
Posts: 10753
Joined: Sun Mar 21, 2004 5:25 pm

Post 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.
AndreasLeix
Posts: 3
Joined: Tue Jun 29, 2004 7:29 am
Contact:

Probleme mit umfangreicher Anwendung

Post 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.
madshi
Site Admin
Posts: 10753
Joined: Sun Mar 21, 2004 5:25 pm

Post 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?
AndreasLeix
Posts: 3
Joined: Tue Jun 29, 2004 7:29 am
Contact:

Exe mit Laufzeitpackages

Post 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 )
madshi
Site Admin
Posts: 10753
Joined: Sun Mar 21, 2004 5:25 pm

Re: Exe mit Laufzeitpackages

Post 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.
Post Reply