![]() |
FastMM Memory Error Detected beim Debuggen
Delphi-Quellcode:
Ich habe seit einigen Tagen den externen FastMM installiert.
---------------------------
X.exe: Memory Error Detected --------------------------- FastMM has detected an error during a FreeMem operation. An attempt has been made to free/reallocate a block that was allocated through a different FastMM instance. Check your memory manager sharing settings. The block size is: 18 This block was allocated by thread 0x818, and the stack trace (return addresses) at the time was: 20007117 [System.pas][System][System.@NewUnicodeString][18313] 200067E8 [System.pas][System][System.@UStrFromPWCharLen][17197] 2009E26F [Controls.pas][Controls][Controls.TControl.GetText][5554] 270036 2005973A [StdCtrls.pas][StdCtrls][StdCtrls.TCustomCombo.Change][3570] 20059607 [StdCtrls.pas][StdCtrls][StdCtrls.TCustomCombo.CNCommand][3528] 2009FA05 [Controls.pas][Controls][Controls.TControl.WndProc][6642] 77608153 [RtlUnlockHeap] 77608153 [RtlUnlockHeap] 77608153 [RtlUnlockHeap] 77608153 [RtlUnlockHeap] The block was previously used for an object of class: TChangeLink The block is currently used for an object of class: Unknown The allocation number is: 77689 The block was previously freed by thread 0x818, and the stack trace (return addresses) at the time was: 20004245 [System.pas][System][System.TObject.FreeInstance][9810] 200047B9 [System.pas][System][System.@ClassDestroy][10632] 200B0D18 [ImgList.pas][ImgList][ImgList.TChangeLink.Destroy][1555] 2000428B [System.pas][System][System.TObject.Free][9829] 2005B9AE [StdCtrls.pas][StdCtrls][StdCtrls.TCustomButton.Destroy][4796] 200A146C [Controls.pas][Controls][Controls.TWinControl.Destroy][7737] 200B69B5 [Forms.pas][Forms][Forms.TScrollingWinControl.Destroy][2644] 200B78EE [Forms.pas][Forms][Forms.TCustomForm.Destroy][3246] 2000428B [System.pas][System][System.TObject.Free][9829] 200BCC25 [Forms.pas][Forms][Forms.TCustomForm.CMRelease][6249] 2009FA05 [Controls.pas][Controls][Controls.TControl.WndProc][6642] The current thread ID is 0x818, and the stack trace (return addresses) leading to this error is: 405789 [System.pas][System][System.@LStrFromPWCharLen][14467] 270036 2005973A [StdCtrls.pas][StdCtrls][StdCtrls.TCustomCombo.Change][3570] 20059607 [StdCtrls.pas][StdCtrls][StdCtrls.TCustomCombo.CNCommand][3528] 2009FA05 [Controls.pas][Controls][Controls.TControl.WndProc][6642] 77608153 [RtlUnlockHeap] 77608153 [RtlUnlockHeap] 77608153 [RtlUnlockHeap] 77608153 [RtlUnlockHeap] 765E491D [LocalUnlock] 765E4933 [LocalUnlock] Current memory dump of 256 bytes starting at pointer address 7EE676F0: B0 04 02 00 00 00 00 00 02 00 00 00 31 00 32 00 00 00 17 10 FB 42 80 80 00 00 00 00 D0 14 E6 7E 00 00 00 00 00 00 00 00 F4 CD 00 20 00 00 00 00 A5 1F 01 00 4E 33 00 20 27 42 00 20 6E 47 00 20 5C 42 00 20 D1 B3 02 20 23 C7 09 20 4D 26 0A 20 01 27 0A 20 91 E1 09 20 E2 82 0A 20 E5 D1 09 20 18 08 00 00 18 08 00 00 6A 33 00 20 F0 83 00 20 97 BF 01 20 31 BF 01 20 96 23 03 20 6F 17 03 20 A6 11 03 20 E2 82 0A 20 88 11 03 20 4A D4 09 20 BA 15 0A 20 14 00 00 00 00 00 00 00 01 74 57 5F 90 85 02 20 B0 70 E6 7E 02 00 00 00 04 00 00 00 00 00 00 00 FE 8B A8 A0 00 00 00 00 D0 14 E6 7E 00 00 00 00 00 00 00 00 F4 CD 00 20 00 00 00 00 B0 D2 00 00 4E 33 00 20 17 71 00 20 E8 67 00 20 CA 6E 00 20 3B 2E 01 20 1D 3D 10 20 85 07 1F 20 D2 18 89 76 12 BF 1E 20 D6 F1 10 20 4A F6 10 20 ° . . . . . . . . . . . 1 . 2 . . . . . û B € € . . . . Ð . æ ~ . . . . . . . . ô Í . . . . . ¥ . . . N 3 . ' B . n G . \ B . Ñ ³ . # Ç . M & . . ' . ‘ á . â ‚ . å Ñ . . . . . . . . . j 3 . ð ƒ . — ¿ . 1 ¿ . – # . o . . ¦ . . â ‚ . ˆ . . J Ô . º . . . . . . . . . . . t W _ … . ° p æ ~ . . . . . . . . . . . . þ ‹ ¨ * . . . . Ð . æ ~ . . . . . . . . ô Í . . . . . ° Ò . . N 3 . . q . è g . Ê n . ; . . . = . … . . Ò . ‰ v . ¿ . Ö ñ . J ö . --------------------------- OK --------------------------- Wenn ich während des debuggens per MouseOver den Inhalt eines TCombobox.Text sehen will oder auch per Evaluate/Modify-Fenster entsprechende Property evaluieren will, kommt oben stehende Fehlermeldung. Trotz jener Fehlermeldung, steht im Evaluate/Modify-Fenster der richtige Wert. Anfangs steht ja: "Check your memory manager sharing settings". Auf was soll ich da mein Augenmerk richten? Der zweite Call Stack ("The block was previously freed...") ist auch jedes Mal anders. Ebenso die Block Size am Anfang der Fehlermeldung! |
AW: FastMM Memory Error Detected beim Debuggen
Was meinst du mit installiert? In der IDE installiert oder im Programm eingebunden?
|
AW: FastMM Memory Error Detected beim Debuggen
Zitat:
![]() Zitat:
Zum Konfigurieren der FastMM4Options.inc habe ich den GUI-Editor von Jeremy North genutzt. |
AW: FastMM Memory Error Detected beim Debuggen
Es scheint generell ein Problem für Instanzen mit String-Properties zu sein.
Es tritt ständig auf. Ich halte den Mauszeiger über entsprechende Property, es kommt kurz als Hint "Evaluate..." und dann kommt die bildschirmfüllende Meldung. |
AW: FastMM Memory Error Detected beim Debuggen
Hätte denn jemand eine Idee, welche FastMM-Option eingestellt werden müsste, um dieses schon recht nervige Verhalten abzustellen?
|
AW: FastMM Memory Error Detected beim Debuggen
Zitat:
|
AW: FastMM Memory Error Detected beim Debuggen
Es kann auch sein, daß unter den zwei betroffenen Modulen (EXE und/oder DLLs) das sharing für FastMM nicht aktiv ist,
aber dennoch Speicher (Strings, Objekte usw.) übergeben werden und der andere FastMM dann versucht das freizugeben, was ihm garnicht gehört. |
AW: FastMM Memory Error Detected beim Debuggen
Es handelt sich um eine Anwendung, die ein Formular aus einer DLL öffnet/kreiert.
Natürlich werden dafür auch mehrere Informationen weitergereicht. Jedoch tritt der Fehler auch bei String-Propertys der Formular-Komponenten auf (TComboBox etc.). Im Verzeichnis wo betreffende EXE und DLL liegen, sind nur die FastMM_FullDebugMode.dll und sein 64-Bit Bruder kopiert. Im Windows/System32 liegt keine FastMM-DLL. Muss ich noch irgendetwas besonderes einstellen? In beiden Projekten (gehören auch zu einer Projektgruppe) ist FastMM auf gleicher Weise aktivert. |
AW: FastMM Memory Error Detected beim Debuggen
Das heißt du erstellst in der DLL eine Form-Instanz und gibst diese dann an die EXE weiter?
Sowas macht man nicht, :!: denn EXE und DLL haben (standardmäßig) nicht nur unabhängige Speichermanager (abgesehn von ShareMem und Co.), sondern auch, und vorallem das, getrennte/eigenständige RTTIs. Die andere Variante wären Laufzeitpackages, bei welchen auch die RTTI mit gemeinsam verwendet wird. Du kannst ein Interface in der DLL bereitstellen, welches für die Kontrolle der Form zuständig ist, aber Objekte sollten tunlichst nicht die DLL/EXE-Grenze überschreiten. Und auch sowas wie Strings (ausgeschlossen ShortString, WideString, PChar und statische Char-Arrays) sollten ohne Shared Memory nicht diese Grenze überschreiten. |
AW: FastMM Memory Error Detected beim Debuggen
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Ich mache es richtig und übergebe der DLL ein PAnsiChar. Zur besseren Veranschaulichung habe ich eine Beispielprojektgruppe mit Delphi 2009 erstellt. Im angehängten ZIP bitte die Projektgruppe öffnen. Es ist ein Programm nebst DLL. In den Projekt-Einstellungen beider Projekte die Werte für Output directory, Working directory, Host application und Unit output directory entsprechend eurer Konfiguration anpassen. Ich arbeite hier mit Umgebungsvariablen. Auch müsst ihr ggf. den Ort der FastMM4.pas anpassen, der wird bei mir über die Tools->Options->Delphi Options-> Library - Win32 vererbt. Die entsprechenden FastMM4-DLLs nicht vergessen. DLL als Startprojekt: In der DLL den Breakpoint nach der Stelle setzen, wo die DLL-Frm den neuen Caption-String erhält (DLLMain - Zeile 22). Sobald das Programm hier anhält, bitte die Maus über die Property Caption von DLLFrm.lbl1.Caption halten. Normalerweise erscheint dann dort dann der entsprechende String, mit FastMM4 eine Fehlermeldung (siehe Screenshot im Anhang). Merkwürdigerweise kann man einen Debug-Hint erhalten, wenn man auf lbl1 geht und dort über TControl nach FText sucht. Hier steht's dann richtig drin. Es ist irgendwie so, als ob FastMM4 nicht mit GetText von der Caption-Property zurecht kommt. Kann jemand mein Problem nachvollziehen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 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-2025 by Thomas Breitkreuz