Seite 1 von 1

Re: Hilfe beim Debuggen gesucht - gelöst

Verfasst: 14. Dezember 2011 19:20
von eehmke
Hallo, ich habe eine Qt 4.7 Gui-Application, die auf meinem Debian System läuft (AMD64 Dual Core). Das Programm funktioniert recht gut, jedoch beginnt es nach einiger Zeit immer langsamer zu werden. Mit top kann ich sehen, dass es bis zu 100% der CPU-Zeit verbraucht (Ein Core), auch wenn keine Benutzereingaben erfolgen. Normal bei Programmstart sind 20%. Nun laufen diverse Timer, mit denen periodische Aufgaben abgearbeitet werden. Die zugehörigen Slots habe ich bereits überprüft. Wenn ich das Programm im gdb laufen lasse und sporadisch anhalte, sehe ich immer nur den Stack von Qt internen Klassen, nie irgendwelchen Code aus meinem Programm. Alle Module sind mit CPPFLAGS = -g -Wall compiliert. Jetzt bin ich am Ende meiner Weisheit, wie kann ich das Problem eingrenzen? :?

Re: Hilfe beim Debuggen gesucht

Verfasst: 14. Dezember 2011 19:48
von franzf
strace den Prozess überwachen lassen (strace -p PID).
valgind --tool=callgrind <executable> kann dir sagen, welche Methoden am häufigsten aufgerunfen werden, an denen kannst du dich hochhangeln.

Re: Hilfe beim Debuggen gesucht

Verfasst: 15. Dezember 2011 12:07
von eehmke
Ich habe es jetzt geschafft, einen Testlauf mit valgrind zu machen und das Ergebnis mit kcachegrind zu sehen. Viel schlauer bin ich aber nicht geworden. Viel Zeit scheint in QTextFormat, QTextEngine Methoden verbraucht zu werden. Die werden aber aus dem Qt Framework gerufen. Auch habe ich festgestellt, dass die hohe CPU-Belastung nur auf einem Laptop (Debian Testing) ohne Graphikkarte auftritt. Auf meinem PC (Gentoo) mit NVidia-Karte bleibt die CPU-Last unter 1%. Jetzt versuche ich erst mal die Grafikeinstellungen des Laptops zu prüfen.

Re: Hilfe beim Debuggen gesucht - gelöst

Verfasst: 16. Dezember 2011 13:07
von eehmke
Weiteres Debuggen hat mich auf diese Spur gebracht:
https://bugreports.qt.nokia.com/browse/QTBUG-16438
Dieser Bug hat die gleichen Symptome. Auch ich habe viele Widgets, die zunächst unsichtbar im Hintergrund angelegt werden. Im Stack finde ich dann die QWidgetPrivate::sendPendingMoveAndResizeEvents. Mal sehen ob es einen Workaround gibt, der Bug ist noch offen.

Re: Hilfe beim Debuggen gesucht - gelöst

Verfasst: 20. Dezember 2011 22:50
von eehmke
Ich habe nun Qt 4.8.0 installiert (direkt aus den Nokia-Sourcen gebaut). Mit der Version tritt das Problem nicht mehr auf, schon die Grundlast von 20% ist auf weniger als 1% zurückgegangen. Der im Bugreport beschrieben Patch ist in 4.8.0 nicht enthalten, das ist schon merkwürdig.