Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#1

Stackoverflow finden - wenn es denn einer ist

  Alt 7. Jan 2016, 10:57
Hallo DP,

ich bin auf der Suche nach dem Grund für ein ekelhaft schlüpfriges Problem mit einem Programm von mir. Es ist (bzw. war) in Delphi 7 geschrieben und lief über Jahre auf WinXP ohne Probleme im 24/7 Einsatz. Der Kunde hat jetzt neue PCs und dort Win7 64 drauf.
Mein Programm hat scheinbar auch dort funktioniert, ist aber nach recht verlässlich 15-20 Minuten abgestürzt. Windows meldete fast immer nur "ein Problem" und bat mir an es abzuschießen. Ein Mal aber kam ein Infofensterchen, wo der Kunde abgelesen hat dass der Absturz in der "usp10.dll" aus dem SysWOW64 Ordner gemeldet wurde.
Da ich das Programm schon länger gerne zumindest in einer wenig neuere IDE haben wollte, habe ich mir die Zeit genommen es auf D2007 zu portieren. (Bei noch neuer haben wir Probleme mit 3rd-Party Komponenten.) Das Kompilat mit D2007 funktionierte ebenfalls erst problemlos, aber nach 15-20 Minuten wieder Absturz. Dieses Mal habe ich zumindest ein Infofenster gehabt, und laut dem soll es nun in der ntdll.dll passiert sein, mit Anwendungsfehlercode 0xc000005.

Der kann leider ein riesen Haufen von Ursachen haben, da es prinzipiell erstmal nur eine Zugriffsverletzung aussagt... Defekter Speicher wird gerne genannt, jedoch passiert dies auf 3 Panel-PCs in exakt gleicher Weise, so dass ich hieran zweifle. Zumal andere Programme klaglos arbeiten. Andere Stellen im Netz sprechen von Stackoverflows, und dass Windows Programme die solche regelmäßig produzieren in eine Art fehlertoleranten Modus gesetzt werden, bei zu vielen Vorkommnissen pro Stunde es aber dann doch abschießt. (Nie gehört zuvor.) Und was mir auffiel: Es sind oftmals Spiele die o.g. Code produzieren, aber nicht in der ntdll.dll sondern meist in der eigenen EXE. Mein Programm ist jedoch eine ganz normale VCL Anwendung, sogar mit nur einem einzigen Fenster.

Ich habe dann mal alle Methoden in meinem Programm in try..except Blöcke gepackt, in der Hoffnung dass ich dann einen besser lokalisierbaren Fehler bekomme. Zudem habe ich Stack-Frames, Bereichs- und Überlaufprüfung aktiviert. Keine der Maßnahmen schlugen an, und nach 15-20min ist mein Programm wieder mit dem gleichen Fehler abgeschmiert. Kann die Ursache dann eigentlich überhaupt noch in meinem Code liegen? Wo kann ich anfangen nach der Ursache zu suchen? (Eurekalog o.ä. scheitert im Moment erstmal daran, dass der Kunde recht weit weg ist und ich erst in 1-2 Wochen dazu kommen werde dort hin zu fahren um weitere "live-tests" zu machen. Ich würde aber gerne im Vorfeld schon mal etwas tun.)

Wo kann man da jetzt noch ansetzen? (Leider kann ich auf den PCs beim Kunden kein Delphi installieren um durchzusteppen oder auf einen debugbaren Break zu hoffen.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat