Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   XE Memory Leak (https://www.delphipraxis.net/168082-xe-memory-leak.html)

haentschman 4. Mai 2012 08:21

XE Memory Leak
 
Hallo alle... 8-)

eben bin ich fast durchgedreht. Ich suche seit gestern in meinem Quelltext ein Memory Leak von
1-12 Bytes (Unbekannt). Alles auskommentiert bis auf die nackige GUI... ohne Erfolg. Ressource neu erzeugt...usw.

Dann habe ich die dproj neu erzeugt... und siehe da das Leak ist weg :thumb: Dachte ich... Dann habe ich die Einstellungen des Projektes wieder angepaßt. :shock: Da waren die 12 Bytes wieder da :shock:

Ich habe herausgefunden:
- sobald im Ausgabepfad .\$(Config)\$(Platform) steht gibt´s das Leak. Steht da ein anderer Pfad oder nix ist es gut.

Kann das jemand nachvollziehen ?

Danke.

jaenicke 4. Mai 2012 09:04

AW: XE Memory Leak
 
Wie sieht denn das entsprechende Log von FastMM aus? Also das ausführliche FullDebug-Log.

Bei mir treten auch mit diesem Ausgabeverzeichnis keine Leaks auf, ich kann das nicht reproduzieren.

haentschman 4. Mai 2012 13:49

AW: XE Memory Leak
 
Soooo... :wink:

hat etwas gedauert...
Zitat:

--------------------------------2012/5/4 14:39:45--------------------------------
A memory block has been leaked. The size is: 12

This block was allocated by thread 0x148C, and the stack trace (return addresses) at the time was:
40461E
40A90D
40A8A8
40AC14
40AD21
776DB10D [Unknown function at RtlUlonglongByteSwap]
776A578E [RtlLoadString]
77683CC3 [Unknown function at RtlImageNtHeader]
776DA71A [Unknown function at RtlUlonglongByteSwap]
77683C4A [Unknown function at RtlImageNtHeader]
77682C8F [RtlInitializeCriticalSection]

The block is currently used for an object of class: Unknown

The allocation number is: 33

Current memory dump of 256 bytes starting at pointer address 7EF7D950:
64 00 65 00 2D 00 44 00 45 00 00 00 92 30 91 80 00 00 00 00 01 DA F7 7E 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 3A 04 00 00 1E 46 40 00 BD AD 40 00 59 62 69 00 30 71 40 00 9C 71 40 00
A3 BB 40 00 BC 80 69 00 9A 33 14 76 F2 9E 68 77 C5 9E 68 77 00 00 00 00 8C 14 00 00 8C 14 00 00
FF AD 40 00 9B 51 48 00 C4 70 40 00 9A 68 46 00 9E 74 40 00 28 81 69 00 9A 33 14 76 F2 9E 68 77
C5 9E 68 77 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 81 2D 92 4C 60 02 6B 00 80 80 80 80
7E D2 6D B3 80 80 80 80 00 00 00 00 39 EB F7 7E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
71 04 00 00 1E 46 40 00 63 5B 40 00 F6 60 40 00 98 5B 40 00 4B 63 69 00 18 79 4A 00 7A 63 69 00
30 71 40 00 9C 71 40 00 A3 BB 40 00 BC 80 69 00 8C 14 00 00 8C 14 00 00 3A 46 40 00 81 5B 40 00
d . e . - . D . E . . . ’ 0 ‘ € . . . . . Ú ÷ ~ . . . . . . . .
. . . . . . . . : . . . . F @ . ½ * @ . Y b i . 0 q @ . œ q @ .
£ » @ . ¼ € i . š 3 . v ò ž h w Å ž h w . . . . Œ . . . Œ . . .
ÿ * @ . › Q H . Ä p @ . š h F . ž t @ . ( i . š 3 . v ò ž h w
Å ž h w . . . . . . . . . . . . . . . . - ’ L ` . k . € € € €
~ Ò m ³ € € € € . . . . 9 ë ÷ ~ . . . . . . . . . . . . . . . .
q . . . . F @ . c [ @ . ö ` @ . ˜ [ @ . K c i . . y J . z c i .
0 q @ . œ q @ . £ » @ . ¼ € i . Œ . . . Œ . . . : F @ . [ @ .

--------------------------------2012/5/4 14:39:45--------------------------------
This application has leaked memory. The small block leaks are (excluding expected leaks registered by pointer):

5 - 12 bytes: Unknown x 1

Note: Memory leak detail is logged to a text file in the same folder as this application. To disable this memory leak check, undefine "EnableMemoryLeakReporting".

...was auch immer das bedeutet :roll:

PS: ich bin nicht auf diesen Ordner angewiesen, da ich eh immer einen seperaten Ordner für das Compilat habe. Aber interressant ist das schon.

himitsu 4. Mai 2012 13:55

AW: XE Memory Leak
 
Zitat:

'de-DE'#0
Da gibt es wohl irgendwo ein Problem mit der Lokalisierung.

Starte mal dein Programm und kurz vorm Beenden guckst du über den Debugger, in der CPU-Ansicht, ob du bei oder ein Stückchen vor den Adressen 40461E
$0040A90D, $0040A8A8, $0040AC14 und $0040AD21 erkennen kannst was das für Funktionen sind.
Eventuell auch je einen Haltepunkt darauf, dann beenden und erneut starten ... eventuell bleibt der Debugger dort hängen und zeigt dir einen ordentlichen Stacktrace.


Notfalls alle möglichen Debuginfos an, Codeoptimierung aus, Stackframes an und mit Debug-DCUs kompilieren. (eventuell reicht auch schon Letzteres aus)
Aber hier natürlich aufpassen, da sich da dabei die Codeadressen verändern könnten.


PS: Selbst wenn du das Leak selber nicht wegbekommst, falls du zuverlässig rausbekommst wo dieses Leck liegt, kannst du es auch ignorieren lassen. (macht Indy auch nicht anders, mit seinen Löschern)

haentschman 4. Mai 2012 14:01

AW: XE Memory Leak
 
Zitat:

Da ibt es wohl irgendwo ein Problem mit der Lokalisierung.
:lol: Wie ich schon anfangs erklärte. Ich habe zwar die Lokalisierung "Lingus" drin (verantwortlich für das "de")...aaaber, ich habe alles aus dem Quelltext geschmissen (incl. Lokalisierung) bis auf die nackigen GUI Controls. --> Leak
In einem anderen Ausgabeordner als .\$(Config)\$(Platform) habe ich mit dem kompletten Quelltext (incl. Lokalisierung) kein Leak.

Nachtrag: Es scheint so, wenn die Lokalisierung verantwortlich wäre, daß das Leak erscheint wenn die exe mit den dcu´s den Ordner teilt. Was aber unlogisch wäre.

himitsu 4. Mai 2012 14:06

AW: XE Memory Leak
 
Die Delphi-RTL/VCL lokalsiert auch.
z.B. bei den Resourcen (du kennst bestimmt die .de-Dateien zu DLLs/BPLs und auch die Resourcen selbst sind sprachgebunden, seitens Windows)

[edit]
hatte oben noch was editiert

haentschman 4. Mai 2012 14:09

AW: XE Memory Leak
 
Zitat:

Die Delphi-RTL/VCL lokalsiert auch.
...aber nur wenn man im Projekt die Sprachen einrichtet. Hatte ich probiert und wieder entfernt. Meinst du da ist was hängengeblieben ?

Zitat:

hatte oben noch was editiert
... das ist mir zu viel Action, weil ich es nicht verstehe :oops:

himitsu 4. Mai 2012 14:19

AW: XE Memory Leak
 
Vor Sonntag werde ich wohl keine Zeit finden und dann muß ich mal sehn, ob ich den Fehler hinbekomm.

Zitat:

Meinst du da ist was hängengeblieben ?
Deswegen hatte ich mir gleich eine VM mit sauberen Delphis installiert ... dort könnte man es dann testen. :angle:

haentschman 4. Mai 2012 14:29

AW: XE Memory Leak
 
Dann kurz noch zur Erklärung:

Ich hatte mich mit Lokalisierung beschäftigt. Erstens Bordmittel. Projekt-> Sprachen usw. Dann habe ich Lingus probiert (von wicht aus der DP). Einfach und simpel. Die Sprachen wieder rausgeschmissen. Ich habe aber die dproj neu erzeugt, die dcu alle entfernt (Debug\Win32)... was man so halt macht. Ich kann das ganze reproduzieren. Bei jedem anderen Ordner als .\$(Config)\$(Platform) habe ich kein Leak.

Ordnerstruktur: (- = Ordner)
Project
- Debug\Win32 (Leak)
- Debug\1.0 (kein Leak)
- Release\1.0 (wenn es soweit ist)
- Language (res der Sprachen - Lingus)
*.pas
*.dpr
.
.
. (bei Ausgabeordner leer und exe hier, kein Leak)
usw.

...komisches Ding das :stupid:

Nachtrag:
- bei einem komplett neuem Projekt (Form1) ohne irgendwas, nur mit ReportMemoryLeaksOnShutdown, tritt dieser Effekt auf :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz