Seite 1 von 1

Wieso läuft mein Programm

Verfasst: 10. März 2011 19:49
von ChristophHaenel
Hallo,

mein ziemlich großes Programm, das ich übernommen habe,
a) läuft gut und stabil, wenn ich es mit Debug erstelle (einschl. QtCore4d.dll)

b) stürzt ca jedes 4. Mal ab ("funktioniert nicht mehr"), wenn ich es mit Release (einschl QtCore.dll) erstelle.

Woran könnte das liegen ?

Gruß Christoph

Verfasst: 10. März 2011 20:47
von solarix
Das ist aus der Ferne kaum abzuschätzen.. nur zwei Hinweise dazu:

- Evt. liegt noch irgendwo im Einzugsbereich des Betriebssystems noch eine andere QtCore.dll rum.. für einen Test könntest du den "dependency walker" verwenden

- Softwarefehler mit Pointern können sich auch so zeigen. Die sind im Nachhinein äusserst schwierig zu finden. Unter Windows kenne ich mich nicht so aus.. unter Linux gäbe es "valgrind" für solche Fälle...

hth!

Verfasst: 11. März 2011 08:04
von RHBaum
genau jedes 4.te mal, oder nur so ca. ?

Isses reproduzierbar, also genau wenn ne folge von aktionen machst ?
Dann koennte es sein, das irgendwo ueber speichergrenzen hinausschreibst, und dich im Debug die Guards retten.

Isses eher mehr wie willkurlich, iss ne racecondition gegen irgendwas meist noch im spiel ... also fehler tritt nur auf, wenn irgendwas schnell genug laeuft ...

Aber Ursache kann am ende viel sein ... wird wohl eher auf debuggen im nichtdebug modus hinauslaufen :-) also codabschnitte steuck fuer stueck wegschalten, um einzugrenzen wo der fehler ist ...

Ciao ...

Verfasst: 11. März 2011 09:19
von ChristophHaenel
Nicht genau jedes 4. Mal, sondern circa jedes 4. Mal, aber nie seltener als jedes 10. Mal. Leider nicht gut reproduzierbar, obwohl ich die Transaktionen genau wiederholen kann.
Speicherfehler ? Ich finde nur new's, keine mallocs im Code. Das Programm ist von einem sehr ordentlichen Programmierer. Allerdings durchschaue ich es nicht.
Wisst ihr einen Mechanismus, um den Programmzustand unmittelbar _vor einem Absturz zu protokollieren? Ist der "Dependenc Walker" dafür geeignet ?

Verfasst: 11. März 2011 09:28
von franzf
Dependency walker nimmt man um zu sehen ob die nötigen Libraries verfügbar sind.
"new" schützt vor Torheit nicht (jedenfalls nicht gegenüber *alloc).

Du suchst wohl nur einen Debugger. Debugger anwerfen, Executable starten, Programm benutzen, auf Crash warten, Callstack anschauen.
Du kannst dir sicher auch ein Script bastelen, das dir das alles automatisch acht, so dass du nur auf ein Desktop-Icon klicken musst (wenn dir der Aufwand zu hoch und die Crashfrequenz zu niedrig ist).