Seite 1 von 1

Seltsamer Fehler

Verfasst: 17. August 2008 18:40
von the[V]oid
Hallo. Also zur Situation: Ich habe einen Thread, der Daten in aktualisiert, während der Haupt-Thread, in dem die Qt-GUI läuft, die Daten visualisiert. Mittels eines Scrollbalkens kann man sich durch die Daten durchscrollen. In regelmäßigen Zeitabständen wird der Bereich des Scrollbalkens erweitert (da neue Daten reinkommen) und die Daten neu gezeichnet, abhängig von der Position des Scrollbalkens. Ich habe natürlich brav Mutexes verwendet. Jedenfalls bekomme ich nach einer gewissen Laufzeit, meist mehrere Sekunden, folgenden Fehler:

Code: Alles auswählen

ASSERT: "!isEmpty(r)" in file painting/qregion_unix.cpp, line 117
Aborted (core dumped)
Der Debugger hat mir leider nicht groß helfen können. Es schaut so aus, als würde der Fehler immer an einer Stelle auftreten, wo ein Byte vom Daten-Eingabestream gelesen wird - Also im Daten-Thread. Allerdings geht für mich aus der Fehlermeldung hervor, dass es irgend etwas mit Qt zu tun hat ("qregion"). Also habe ich mal auf gut Glück ein paar Sektionen des GUI-Codes auskommentiert, und bin so zu der Erkenntnis gelangt, dass der Fehler nur dann eintritt, wenn ich darauf verzichte, bei jeder Bereichserweiterung des Scrollbalkens den Wert des Scrollbalkens sofort auf das Maximum zu setzen.

Weiß jemand Rat, wie ich dem Fehler auf die Schliche kommen könnte?
Vielen Dank im Voraus!

Re: Seltsamer Fehler

Verfasst: 17. August 2008 19:45
von pfid
the[V]oid hat geschrieben: Weiß jemand Rat, wie ich dem Fehler auf die Schliche kommen könnte?
Vielen Dank im Voraus!
Mit einem backtrace des coredumps. Ohne mehr code kann man ansonsten nichts sagen.

Re: Seltsamer Fehler

Verfasst: 17. August 2008 19:54
von the[V]oid
Hi,
pfid hat geschrieben:Mit einem backtrace des coredumps.
Was meinst du damit? Wie geht das? ^^
Also ich bin auf Linux und weiß, dass ich den coredump mit GDB laden kann. Aber was meinst du dann mit backtrace?

Wenn ich einfach auf der GDB-Kommandozeile "backtrace" ausführe, hilft mir das nicht weiter:

Code: Alles auswählen

(gdb) backtrace 
#0  0xb7a1d5ec in ?? ()
#1  0xb663c188 in ?? ()
#2  0xb7a1d9b4 in ?? ()
#3  0x00000004 in ?? ()
#4  0xb7ee92d8 in ?? ()
#5  0xb663c178 in ?? ()
#6  0xb79c4838 in ?? ()
#7  0x0808b224 in ?? ()
#8  0xb663c188 in ?? ()
#9  0xb7a1d51b in ?? ()
#10 0x0808b238 in ?? ()
#11 0x00089010 in ?? ()
#12 0x0808b220 in ?? ()
#13 0x0808ada0 in ?? ()
#14 0x0808b238 in ?? ()
#15 0xb7ee92d8 in ?? ()
#16 0x00000000 in ?? ()
Ich kompiliere selbstverständlich ohne Optimierungen und mit "-g".