Einzelnen Beitrag anzeigen

UntoterGeist

Registriert seit: 18. Sep 2019
25 Beiträge
 
#1

externe Exception c0000006

  Alt 18. Sep 2019, 22:33
Hatte schon mal das Thema erstellt. Evl. gab es ja einen Fehler beim Erstellen. Zumindest findet man das Thema in der Forensuche und unter Themen mit Beteiligung. Also probiere ich es nochmal. Ein Mod war ja schon da. Hab ich gesehen.

Ich weiß es gibt Tonnen Informationen dazu im Internet mit Google und auch hier im Forum. Habe ich gelesen und verstanden. Wirklich!

Einleitung:

Ich schreibe auf Arbeit mit Delphi 2010 ein Datenbankprogramm mit der mysql.pas und der libmysql.dll. Darin werden nur Unternehmensintern Kundendaten und Lizenzschlüssel der Produkte erstellt und verwaltet. Es wird schon eingesetzt, weil wir "agile Entwicklung ausprobieren". Das bedeutet so alle 1-2 Wochen soll ein neues Release mit neuen Features kommen, die auch alle QM-Konform getestet werden müssen. Eher so jede Woche. Im Moment allerdings nicht.
Nun ist es so, eigentlich schon länger, dass wenn mein Chef das Programm aus dem Netzwerk startet und es einfach laufen lässt, es regelmäßig mal mehr mal weniger zu der Exception c0000006 (sind das genug Nullen?) kommt, wenn man es beenden oder irgendwas anderes machen will. Das Programm läuft bei ihm im Prinzip solange bis es abstürzt. Also auch übers Wochenende und länger. Wenn man das Programm, dass hab ich gefühlt 10k mal getestet, lokal startet kommt kein Fehler. Auch nicht nach 6 Stunden. Der Fehler tritt nur auf und das sehr häufig, wenn ich das Programm aus dem Netzwerk starte, laufen lasse und dann den Rechner mehrfach in den Standby schicke. Und irgendwann dann passiert es dann.
Die .dll wird dynamisch geladen weil's nicht anders geht. Ich hab so gut wie jede Programmzeile, die was mit der Datenbank zu tun hat, geloggt. Beim Beenden schmiert er dann aber beim Versuch ein Objekt freizugeben ab. Es ist immer das erste Objekt, wenn man es stückweise auskommentiert. Das wäre z.B. die Ressource oder das das LibHandle. Oder iwas auch immer danach kommt. Alle Objekte werden auf Nil getestet. Also sie sind in jedem Fall nicht Nil.
Es sind aber nicht nur Datenbankobjekte bei den es abraucht. Manchmal kommt der Fehler auch, wenn Fenster initialisiert werden. Genauer gesagt bei inherited Create(AOwner). Das ist die letzte Zeile die laut Log ausgeführt wird. AOwner ist in dem Fall Self aus dem Hauptfenster, dass regulär erstellt wird. Create wurde überladen, weil ich einen Parameter übergeben muss. Es kommt zwar eine Warnung, dass eine virtuelle Methode verborgen wird, aber es geht "eigentlich". In der mysql.pas kommen mehr Warnungen. Vor allem unsichere Pointer.
Ich habe sogar ein neues Delphi Projekt angelegt zum testen. Das selbe Scenario, die Datenbankobjekte werden beim Start initialisiert, sind nicht nil und beim free raucht es ab, wenn das Programm lange lief. Ich hab sogar ein Projekt angelegt, dass einen verfluchten einfachen Button dynamisch erzeugen soll. Konnte das aber noch nicht genau testen, ob es dann auch abschmiert. Evl. muss es ja auch ein Fenster oder etwas ähnliches sein. Allerdings hab ich keine Idee welches Objekt sonst noch den Parameter Self braucht und komplex genug ist.

Das Problem:

Wie kann ich den verdammten Fehler auflösen? Programm geht nicht!

Ich weiß, dass es die Kompileranweisungen gibt bei der das gesamte Programm in die Auslagerungsdatei geladen wird. Und wisst ihr was, der Fehler ist bei mir in der Experimental bisher nicht mehr aufgetreten. Egal was ich gemacht habe. Mir wurde aber praktisch verboten diese Anweisung zu benutzen, weil daran kann es nicht liegen. Außerdem wäre diese Methodik Try and Error und das geht überhaupt nicht. Und diese Anweisung wäre Missbrauch der Auslagerungsdatei. Das Netzwerk kann auch nicht schuld sein, weil: Dann müsste das ja größere Bahnen ziehen.

Der Fehler muss also im Code liegen und den Objekten die ich nicht sauber erstelle und Freigebe. Der Fehler liegt also bei mir und meinem Code! Den ich jetzt durchprüfen darf, weil da sind tausend Stellen die nicht sauber sind! Wirklich der ganze Code ist schrott!

Was soll ich jetzt eigentlich noch machen außer evl. Kündigen. Aber ansonsten ist alles tipitopi

Hat jemand ne Idee was ich jetzt noch tun könnte?
  Mit Zitat antworten Zitat