![]() |
MemCheck probleme
Habe wollte mein Programm auf Speicherprobleme prüfen und lud mir MemCheck runter und fügte es wie angegeben ein
die PAS als erstes in der DPR und direkt nach dem Begin MemChk; Nun mein Programm brauch ewig zumstarten und bricht dann mit einer Meldung StackÜberlauf ab... das Programm startet erst gar nicht... Was läuft hier falsch?! |
Re: MemCheck probleme
Schau dir mal MemProof an. (finde ich persönlich wesentlich unproblematischer)
MfG Thorsten |
Re: MemCheck probleme
OK habe MemProf mal angeschaut aber bin ja absolut neu auf diesem Gebiet un weis nicht was mir dies e Daten sagen!
Code:
Errors Error 264 264 0 0
Pointers Live Pointer 16951 16967 1329044 1336045 Memory Virtual Memory 86 87 1413120 1429504 Memory Heap Memory 127 135 31747 33643 Memory Global Heap 9 11 540672 622592 Memory Local Heap 40 49 13064 22912 COM CoInitialize 1 1 0 0 OLE SysString 1 5 2 1048 GDI Pen 2 4 0 0 GDI Bitmap 39 43 0 0 GDI Brush 7 10 0 0 GDI Font 21 21 0 0 GDI Palette 4 4 0 0 GDI Region 0 6 0 0 GDI DC 0 5 0 0 User Window 60 60 0 0 User Icon 7 7 0 0 User Cursor 7 7 0 0 User Timer 0 1 0 0 User Window DC 0 2 0 0 Kernel File 0 1 0 0 Kernel Thread 10 10 0 0 Kernel File Mapping 1 4 0 0 Kernel File Mapping View 1 4 0 0 Kernel Mutex 1 2 0 0 Kernel Event 18 18 0 0 Kernel Critical Section 968 970 0 0 Kernel Critical Section Enter 0 10 0 0 Kernel Find First 0 1 0 0 Registry Registry 21 22 0 0 |
Re: MemCheck probleme
Hallo delphinia,
diese Liste zeigt dir an, was dein Programm so alles verwendet. Wichtig ist dabei nur, dass nach dem Beenden deines Programms die Spalte Recource Count, Current# nur noch Nullen enthält. Wenn dies nicht der Fall sein sollte, dann zeigt dir MemProof über Recource Details die Quellcodezeile(n) in deinem Programm, in der der Fehler auftritt bzw. durch die der Fehler ausgelöst wurde. Dieses Anzeige geht nur, wenn man MemProof die Verzeichnisse zu den Quellcodedateien gibt und wenn man in den Linkereinstellungen das TD32-Debug-Info eingeschaltet hat (und auch wirklich alles neu kompiliert hat). Es ist sinnvoll MemProof als Tool einzurichten. Dann ist der Aufruf und die Bekanntgabe der Verzeichnisse nur ein Mausklick. Siehe ![]() MfG Thorsten |
Re: MemCheck probleme
Ok danke erstmal soweit.. der Grudn warum ich das überhaupt mache ist der, das ich nun mein Programm vergessen ahbe auszumachen und die Nachüber laufen gelassen habe, ohne das ich wirklcih was gemacht habe darann.
Und plötzlich 40 MB im Ram belegte - beim Startmal gerade 7 MB. Und auch wenn ich eine TForm aufrufe und wider schliesse udn wieder öffne udn wieder schliesse etc.. sich das Programm mit dem RAM den Bauch vollschlägt ;). Ich dachte immer Form auf mehr Ram - Form wider zu - dahin zurück wo er vorher stand... |
Re: MemCheck probleme
Zitat:
Selbst verwende ich seit einiger Zeit FastMM. Dieser bietet ziemlich das gleiche wie MemCheck + einen besseren Memory-Manager. |
Re: MemCheck probleme
Ich verwende MemCheck unter Delphi 2005 und es funktioniert einwanfrei, wenn unter den
Projektoptionen / Compiler / "Optimierung" AUSgeschaltet ist Projektoptionen / Compiler / "StackFrame" EINgeschaltet ist Projektoptionen / Linker / "Mit TD-32-Debug-Info" EINgeschaltet ist Dann zeigt MemCheck sogar die Zeilennummer an, wo evtl. ein Problem besteht. Allerdings wird die Exe dadurch riesengroß. Also nicht vergessen, die Optionen wieder zurückzunehmen. Hat bei mir schon so manches Problem gefunden. |
Re: MemCheck probleme
Wie "öffnest" Du denn die Form. Wird sie neu erzeugt oder einfach nur neu eingeblendet? Wenn Du eine Form schließt wird sie standardmäßig nur "versteckt" und der Speicher nicht wieder freigegeben.
Im Ereignis OnClose der Form kannst Du eine Action setzen, die anweist das Formular zu zerstören. |
Re: MemCheck probleme
Also ich bin mit MemProof überhaupt nicht zurecht gekommen, während MemCheck mir schon bei einigen Leaks geholfen hat.
Allerdings kann MemCheck am Anfang etwas verwirrend sein, wenn er Speicherlecks an Stellen anzeigt, an denen sie eigentlich nicht auftreten können, mit der Zeit stellt man dann fest, dass es bemängelt, dass die markierte Instanz überschrieben wurde ... Das praktische ist, dass MemCheck eine Exception generiert, die dafür sorgt, dass der Debugger beim beenden des Programmes automatisch die richtige Zeile markiert. Und die Logfiles sind auch gut lesbar. mfG Markus |
Re: MemCheck probleme
Ich habe das gleiche Problem: Ich führe MemChk ganz am Anfang des Projektes aus und nach einiger Zeit (irgendwo zwischen Application.CreateForm und TForm1.OnCreate) schmiert mir alles mit einem Stack Overflow ab. Ich habe alle Optionen so, wie es im Tutorial beschrieben ist.
Wie bringe ich das jetzt zum laufen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz