Exception nach Programmende

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Exception nach Programmende

Beitrag von Scotty »

Meine destroy-Routinen werden alle sauber durchlaufen und heaptrace meldet, dass alles freigegeben sei. Allerdings bekomme ich danach eine AV. Sollte ich dem Problem nachgehen (oder ist das eine Frage von heaptrc) und wenn, wo?

Code: Alles auswählen

Heap dump by heaptrc unit
1237830 memory blocks allocated : 124174141/128579336
1237830 memory blocks freed     : 124174141/128579336
0 unfreed memory blocks : 0
True heap size : 1867776
True free heap : 1866880
Should be : 1867776
An unhandled exception occurred at $00000000004ABFA4 :
EAccessViolation : 
  $00000000004ABFA4
 

Benutzeravatar
theo
Beiträge: 10899
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception nach Programmende

Beitrag von theo »

In welchem Zusammenhang? COM/OLE/ActiveX oder sowas?

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Exception nach Programmende

Beitrag von Scotty »

theo hat geschrieben:In welchem Zusammenhang? COM/OLE/ActiveX oder sowas?
Linux (gerade eben nur damit getestet). Interface mit corba, OpenGl, Threads, Synapse... alles drin im Programm ;-)
(Mir ist klar, dass die Frage sehr allgemein gestellt ist.)

Benutzeravatar
theo
Beiträge: 10899
Registriert: Mo 11. Sep 2006, 19:01

Re: Exception nach Programmende

Beitrag von theo »

Ich hatte sowas auch schon mal im Zusammenhang mit ActiveX.
Das war nur mit heaptrc ein Problem. Ich habe es einfach ignoriert und das Prog. läuft und schliesst seither ohne zu mucken.

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Exception nach Programmende

Beitrag von marcov »

Kann auch einfach weg sein das dein Programm RTL/heap State überschriebt, und das beim beenden das bemerkt wird.

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Exception nach Programmende

Beitrag von Socke »

Scotty hat geschrieben:Meine destroy-Routinen werden alle sauber durchlaufen und heaptrace meldet, dass alles freigegeben sei. Allerdings bekomme ich danach eine AV. Sollte ich dem Problem nachgehen (oder ist das eine Frage von heaptrc) und wenn, wo?
Ja, du musst dem nachgehen. Bei einer Access Violation greift dein Programm auf ein Stück Arbeitsspeicher zu, das ihm nicht vom Betriebssystem zugeordnet wurde. Das ist immer ein Fehler und gehört behoben. Die Unit heaptrc hilft häufig dabei diese Fehler zu finden.
Da dein Stacktrace wenig aussagekräftig ist, hilft wohl zuerst nur der Debugger. Damit kannst du definitiv herausfinden, wo auf den Speicher zugegriffen wird (eine Variable, ein Objekt, etc.), auch wenn dies in der LCL/RTL liegen sollte. Bei einem Zweiten Durchlauf setzt du im Debugger eine Haltebedingung auf die Änderung dieser Variablen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Exception nach Programmende

Beitrag von Scotty »

Socke hat geschrieben:Da dein Stacktrace wenig aussagekräftig ist, hilft wohl zuerst nur der Debugger.
Ich debugge ohne Probleme durch meinen Code (d.h. mainform.destroy und co). Wie kann ich da weiter machen?
gdb meldet, wenn ich es in der Konsole und ohne heaptrc laufen lasse, "[Inferior 1 (process 13611) exited normally]".

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Exception nach Programmende

Beitrag von mse »

Zuerst alles (auch die FPC RTL) mit debug info kompilieren. Danach in der IDE "stop at exception" aktivieren. Vermutlich passiert die exception im finalize Abschnitt einer lib.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Exception nach Programmende

Beitrag von Euklid »

Scotty hat geschrieben:Meine destroy-Routinen werden alle sauber durchlaufen und heaptrace meldet, dass alles freigegeben sei. Allerdings bekomme ich danach eine AV. Sollte ich dem Problem nachgehen (oder ist das eine Frage von heaptrc) ....?
Hast Du mal Valgrind probiert?

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Exception nach Programmende

Beitrag von mschnell »

Exceptions bei Programm-Ende passieren sehr leicht bei Threads, die nicht vor beenden des Mainthreads sauber terminiert sind. Ein Thread kann sich nur selber beenden. "Abwürgen" führt oft zu solchen Problemen.

-Michael

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Exception nach Programmende

Beitrag von Scotty »

Threads laufen (noch) nicht, hab ich geprüft - nur Start und Beenden (wobei natürlich einiges initialisiert wird).

Valgrind liefert eine Menge an Informationen und bestätigt den Leak (der gesamte Output ist 1.7MB groß). Aber wie komme ich an Zeilennummern, Namen von Objekten o.ä.?

Code: Alles auswählen

==1646== LEAK SUMMARY:
==1646==    definitely lost: 24,046 bytes in 61 blocks
==1646==    indirectly lost: 53,106 bytes in 2,182 blocks
==1646==      possibly lost: 1,763,901 bytes in 7,319 blocks
==1646==    still reachable: 1,329,522 bytes in 8,940 blocks
==1646==         suppressed: 0 bytes in 0 blocks 

Code: Alles auswählen

==1771== Collected : 8385404870
-MObjFPC -Scghi -CX -CirotR -O1 -g -gl -gv -XX -vewnhib -Fl/opt/gnome/lib -FuSynapse -Fu... -l -vm5024,5057 -dLCL -dLCLgtk2

Antworten