4 Stimmen

Wie finde ich Ressourcenlecks in Win32?

Nach einigen Stunden schlägt meine Anwendung beim Erstellen eines neuen Schriftobjekts fehl:

CreateFontIndirect() gibt NULL zurück.

Ich weiß, wie ich Speicherlecks finden kann (z. B. mit dem Parallel Inspector oder einem anderen Profiler - die meisten von ihnen bieten Leckerkennung). Aber wie kann ich ein Ressourcenleck in Win32 ausfindig machen?

0 Stimmen

Stellen Sie zunächst sicher, dass Sie ein GDI-Handle-Leck haben - sehen Sie sich die Spalte GDI-Handles im Task-Manager an.

8voto

Rob Punkte 72944

Holen Sie sich ein Exemplar von GDI-Ansicht - Dieses nützliche Tool zeigt alle GDI-Objekte an, die von Ihrer Anwendung verwendet werden, einschließlich Details zum Namen der Schriftart, Größe usw. Dies hat sich in der Vergangenheit als sehr nützlich erwiesen.

Für Win32-Anwendungen sollten Sie sich das WTL-Framework ansehen - dieses umhüllt GDI-Objekte mit leichtgewichtigen C++-Klassen, die das Löschen von Objekten für Sie übernehmen.

0 Stimmen

Ja, das scheint ein sehr gutes Instrument zu sein. Erstaunlich klein. Ein Zip von nur 50kB. Danke!

1 Stimmen

Sie können auch deleaker verwenden. Es ist ein mächtiges Werkzeug!

0 Stimmen

Kann es für Ubuntu 18.04 verwendet werden?

5voto

Kevin Punkte 7806

Es sieht aus wie der MSDN-Artikel Ressourcenlecks: Aufspüren, Lokalisieren und Reparieren von undichtem GDI-Code ( über archive.org ) könnte Ihnen eine Antwort geben.

0 Stimmen

Nun, der Artikel ist gut. Aber das erwähnte Tool ist nicht verlinkt - ich kann es nirgends finden.

2voto

Soo Wei Tan Punkte 3202

Wenn Sie eine BoundsChecker verfolgt es nicht nur Speicherlecks, sondern auch Ressourcenlecks.

0 Stimmen

Danke für den Tipp - ich habe BoundsChecker und es war mal das beste Tool überhaupt. Die Qualität hat aber seit unserer ersten Lizenz (vor ca. 15 Jahren) kontinuierlich nachgelassen, vor allem seit compuware BoundsChecker übernommen hat. Es beendet sich einfach sofort nach dem Start und vor kurzem hat es mein ganzes x64 System gestoppt. Compuware DevPartner (der Nachfolger von BoundsChecker) ist übrigens immer noch nicht in der Lage, 64-Bit Software zu analysieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X