Hallo,
mein Programm hat die unangenehme Eigenschaft, beim Kunden des öfteren abzustürzen - bei mir allerdings nie! Betriebssystem ist Windows 7 (32bit). Compiler VC 2010
Jetzt hat mir der Kunde ein Protokoll zur Verfügung gestellt, das die Returncodes des Programmes mitschreibt. Mit ein paar Ausnahmen erhalte ich bei allen Abstürzen den Wert -1073741502 (hex. C0000142) - lt Microsoft eine Hinweis, das er eine Dll nicht korrekt initialisieren konnte. Gibt es irgendwo eine Aufstellung, was für Fehlercodes Qt bei Programminternen Problemen sendet (also wenn Qt wegen interner Probleme abschmiert) oder bekommt man generell einen Returncode 0, wenn nicht vom Betriebssystem oder vom Programmcode direkt ein abweichender Returncode generiert wird?
Gruss
Tilman (Räger)
Returncode bei Programmabsturz
-
Tilman Räger
- Beiträge: 189
- Registriert: 6. Juni 2007 15:23
- Wohnort: Göttingen
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Returncode bei Programmabsturz
Da dies ein Windows-Fehlercode ist wird dir Qt nicht weiterhelfen.
Und bei fehlenden Dlls wie immer -> Dependency Walker
Und bei fehlenden Dlls wie immer -> Dependency Walker
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Returncode bei Programmabsturz
Wenn es wirklich am "korrekt initialisieren" einer dll liegen sollte ....
Würde er, wenn er feste abhaengigkeiten hat, beim laden schon abschmieren ...
ist das korrekt ?
"richtig dynamisch" geladene Dlls, also über loadlibray und co, koennen natürlich irgendwann mitten im betrieb beim dynamischen laden fehler liefern .... diese "Abhängigkeit" wird man aber IMHO nicht im Dependency Walker sehen.
sollt es wirklich über das dynamische laden kommen, einfach mal die errorwerte aller eigenen loadlibrary aufrufe loggen.
sollt es wirklich nen Problem von den statischen geladenen Qt dlls liegen, hasst kaum ne chance da mehr über dein Prog zu machen, da die dlls vor der main geladen werden ...
WObei qt dlls auch andere Dlls dynamisch anziehen könnten .... Hauptverdächtige sind dann alle pluginähnlich arbeitenden Module, also sowas wie Icons, SQL anbindungen, Sound, ....
Auf alle Fälle solltest es erstmal nachvollziehbar rekonstruieren können ...
Ciao ...
Würde er, wenn er feste abhaengigkeiten hat, beim laden schon abschmieren ...
klingt aber eher nach Abstürzen die im Betrieb auftreten ?beim Kunden des öfteren abzustürzen
ist das korrekt ?
"richtig dynamisch" geladene Dlls, also über loadlibray und co, koennen natürlich irgendwann mitten im betrieb beim dynamischen laden fehler liefern .... diese "Abhängigkeit" wird man aber IMHO nicht im Dependency Walker sehen.
sollt es wirklich über das dynamische laden kommen, einfach mal die errorwerte aller eigenen loadlibrary aufrufe loggen.
sollt es wirklich nen Problem von den statischen geladenen Qt dlls liegen, hasst kaum ne chance da mehr über dein Prog zu machen, da die dlls vor der main geladen werden ...
WObei qt dlls auch andere Dlls dynamisch anziehen könnten .... Hauptverdächtige sind dann alle pluginähnlich arbeitenden Module, also sowas wie Icons, SQL anbindungen, Sound, ....
Auf alle Fälle solltest es erstmal nachvollziehbar rekonstruieren können ...
Ciao ...
Re: Returncode bei Programmabsturz
Könnte eine race condition die Ursache sein?
Ich hatte mal eine ähnliche Situation: Auf meinem Entwicklungsrechner lief meine Software, auf dem Produktivrechner nicht. Der Grund war, dass die zeitliche Abfolge, in der meine QWidgets erstellt wurden, nicht explizit festgelegt war. Es konnte also zu Zugriffen auf ein QWidget kommen, dass noch nicht instanziiert war.
Das zu rekonstruieren ist nicht einfach möglich. Du könntest mitloggen, ob alle Objekte da sind. Oder Deinen Programmablauf nochmal kritisch durchdenken.
Ich hatte mal eine ähnliche Situation: Auf meinem Entwicklungsrechner lief meine Software, auf dem Produktivrechner nicht. Der Grund war, dass die zeitliche Abfolge, in der meine QWidgets erstellt wurden, nicht explizit festgelegt war. Es konnte also zu Zugriffen auf ein QWidget kommen, dass noch nicht instanziiert war.
Das zu rekonstruieren ist nicht einfach möglich. Du könntest mitloggen, ob alle Objekte da sind. Oder Deinen Programmablauf nochmal kritisch durchdenken.
-
Tilman Räger
- Beiträge: 189
- Registriert: 6. Juni 2007 15:23
- Wohnort: Göttingen
Re: Returncode bei Programmabsturz
Hallo,
bin wegen Urlaub und Arbeit an anderen Projekten bisher nicht zum Antworten gekommen, deswegen etwas verspätet.
zu den bisherigen Antworten und aufgeworfenen Fragen:
Das mir Qt-Doku nicht bei Windows-Fehlercodes weiterhilft, ist schon klar. Meine Frage ging eher in die Richtung, was gibt Qt selber für Fehlercodes zurück, wenn eine Anwendung baden geht (ohne Beteiligung des Betriebssystems). Gibt es hier irgendwelche Standardwerte oder Dokus?
Gruß und nocheinmal Danke für die Tips
Tilman (Räger)
bin wegen Urlaub und Arbeit an anderen Projekten bisher nicht zum Antworten gekommen, deswegen etwas verspätet.
zu den bisherigen Antworten und aufgeworfenen Fragen:
Da dies ein Windows-Fehlercode ist wird dir Qt nicht weiterhelfen.
Und bei fehlenden Dlls wie immer -> Dependency Walker
Das mir Qt-Doku nicht bei Windows-Fehlercodes weiterhilft, ist schon klar. Meine Frage ging eher in die Richtung, was gibt Qt selber für Fehlercodes zurück, wenn eine Anwendung baden geht (ohne Beteiligung des Betriebssystems). Gibt es hier irgendwelche Standardwerte oder Dokus?
Ja. Die Abstürze kommen im laufenden Betrieb. Seltsamerweise allerdings nur bei einer Kundeninstallation - alle anderen Installationen laufen anscheinend ohne Abstürze (zumindest habe ich nichts gegenteiliges bisher gehört). Das war ja auch der Grund, warum mir die Theorie mit der DLL so plausibel erschien.klingt aber eher nach Abstürzen die im Betrieb auftreten ?
ist das korrekt ?
Wäre natürlich nicht unmöglich - ich werde es auf jeden Fall mal im Hinterkopf behalten. Allerdings haben die Abstürze nichts mit irgendwelchen Dialogen zu tun. In den Logfiles hat man eher das Gefühl, das Programm ist fleißig am Däumchendrehen und auf einmal ist ein Neustart fällig. Ich werde mir aber auf jeden fall noch einmal die Threads des Programms vornehmen, ob es da zu irgendwelchen Problemen kommen kann.Könnte eine race condition die Ursache sein?
Gruß und nocheinmal Danke für die Tips
Tilman (Räger)