Hi, On 4 Feb 2003, Alexander Glintschert wrote:
#0 __pthread_mutex_lock (mutex=0x410) at mutex.c:99
Wenn wir mal annehmen, das der mutex-Paremeter tatsache den Wert 0x410 (==1040) hat, dann ist der Absturz klar (es ist eben ein Pointer ins Nirvana). Es kann allerdings sein, das die debug-info einfach nicht ganz korrekt ausgewertet wird ...
#1 0x089126fd in __libc_free (mem=0x410) at malloc.c:3151
... und da hier ein free ebenfalls auf 0x410 gemacht wird, welches hoechstwahrscheinlich _nicht_ die Addresse der obigen mutex ist, ist dies sogar die wahrscheinlichere Variante. I.e. die debug-infos sind nicht exakt (zumindest die Belegung der Parameter), womit der Backtrace einiges an Information einbuesst.
#7 0x0809ee2d in GenespotterBase (this=0x8f17aac, parent=0x410, name=0x3a0007e
, fl=1040) at .ui/genespotterbase.cpp:198
Gegeben obiges Verhalten wuerde ich durchaus nichts auf diese von gdb herausbekommenen Werte geben. Sie sind so kaputt, das, wenn sie stimmen wuerden schon vorher ein SEGV haette passieren muessen. Z.B. ist der naechste 'this' Pointer auch im Nirvana :
#8 0x0804b7ad in Genespotter (this=0x3a0007e, parent=0x410, name=0x410
, fl=1040) at genespotter.cpp:100
Hier einige relevante Daten: - Programmiert ist das Ganze in C++. - Ich verwende den Gcc 3.2. - Die Applikation verwendet die Qt-Library in der Version 3.0.5. - Einige der Third-Party-Bibliotheken (unter anderem die Qt-Bibliothek) wurden unter SuSE 7.2 kompiliert und lediglich in das neue System übernommen. Übersetzt wurden sie allerdings ebenfalls mit dem Gcc 3.2.
Hmm. Welche Bibliotheken genau wurden aus der 7.2 genommen? Kompilierst du das Programm selbst auf der 8.x , holst die libs zum linken aber von ner 7.2? Wie statisch ist das Programm? I.e. wird irgendeine lib doch dynamisch gelinkt (z.B. libc, oder gar libpthread?). Was sagt denn ldd zu deinem executable.
Darüberhinaus konnte ich folgende Merkwürdigkeiten beobachten: 1. Linke ich das Programm dynamisch, läuft es klaglos.
Ohoh. Ohne obige Infos wuerde ich erstmal vermuten, das es entweder das Problem mit unserem malloc-Ersatz ist, oder irgendwas mit pthread. Was sagt denn "nm /path/to/libqt.a | grep malloc" ? (ich meine die Lib, welche du dazulinkst). Zwischen 7.2 und 8.x hat sich das threading geaendert, und es kann durchaus sein, das in statischen Varianten das 7.2 Verhalten einkompiliert ist, mit 8.x aber nicht mehr kompatibel ist.
Hat irgendjemand eine Ahnung, wo das Problem liegen könnte? Ich bin mittlerweile ziemlich ratlos. Das Einzige, was mir noch einfällt, ist, alle Bibliotheken, die ich unter SuSE 7.2 als Third-Party-Libraries kompiliert hatte, auf meinem 8.1 noch einmal zu übersetzen. Wenn möglich, würde ich das allerdings gerne vermeiden, denn das erzeugt doch eine Menge Aufwand...
Es waere allerdings wirklich die vernuenftigste Alternative. Ciao, Micha.