Autor Beitrag
avenger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Mo 20.07.09 22:04 
habe ein seltsames Phänomen und weiss nicht wie ich es besiegen kann.

Ich habe ein ganz normale group box auf einem Formular. Sobald ich ein Label in diese group Box einfüge bekomme ich eine exception beim schliessen der Anwendung. Wenn ich die Group Box lösche dann dann tritt die exception nicht mehr auf. Und dies tritt auch nur auf meinem AMD (weiss nicht obs damit was zu tun hat auf) Auf meinem Intel Laptop läuft die Anwendung ainwandfrei. BEides XP Proffesional. Hat schonmal jemand sowas gehabt ?!
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mo 20.07.09 23:13 
Ich könnt wetten, dass das ganze nichts mit der Groupbox zu tun hat.

Vermutung:
Du überschreibst dir irgendwo den Speicher, und dies tritt nun zufällig bei der Groupbox auf.
Am liebsten passiert sowas bei (dynamischen) Arrays, wenn du dort zu weit (also über die Grenzen hinaus) läufst und dies überschreibst.

Aktivier in den Projektoptionen mal die Bereichsprüfung, erzeuge das Projekt neu, und lass das dann nochmal laufen.

_________________
PROGRAMMER: A device for converting coffee into software.
avenger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Di 21.07.09 14:12 
Hab ich gemacht, die Bereichsüberprüfung gibt mir auch keine Info. Aber auf meinem Laptop auf dem Delphi installiert ist tritt der Fehler ja auch nicht auf. nur auf dem Produktionsrechner auf dem die Anwendung laufen soll. Leider gibts da kein Delphi und somit kein Debugger :-(
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 21.07.09 14:17 
Arbeitest du zufällig mit mehreren Threads?

Wenn ja, prüf mal, dass du keine nicht-synchronisierten Zugriffe auf gemeinsame Objekte / Formulare hast.

_________________
PROGRAMMER: A device for converting coffee into software.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 21.07.09 14:21 
Schreibe einmal in den Projektquelltext (Projekt --> Quelltext anzeigen) diese Zeile direkt nach dem begin:
ausblenden Delphi-Quelltext
1:
ReportMemoryLeaksOnShutdown := True;					
Die bewirkt, dass bei der Ausführung aus Delphi heraus Speicherlecks angezeigt werden. Da sollte beim Beenden, nachdem du möglichst alle Funktionen benutzt hast, keine Meldung kommen.


Zuletzt bearbeitet von jaenicke am Di 21.07.09 14:21, insgesamt 1-mal bearbeitet
avenger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Di 21.07.09 14:21 
Jetzt hab ich auch ne nicht nachvollziehbare Exception beim schliessen meiner Anwendung.
Hab mal einen Screenshot des Assmebler Codes angehangen. Vielleicht kann einer von euch daraus was erkennen ?!?
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 21.07.09 14:23 
Eine solche Meldung ist typisch, wenn ein Speicherproblem vorliegt. Entweder wie user profile iconXentar geschrieben hat wegen Threads oder wegen Pointerzugriffen oder ähnlichem. Deshalb versuche es am besten einmal mit der Zeile, die ich geschrieben habe, wenn du Threads ausschließen kannst.
avenger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Di 21.07.09 14:25 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Schreibe einmal in den Projektquelltext (Projekt --> Quelltext anzeigen) diese Zeile direkt nach dem begin:
ausblenden Delphi-Quelltext
1:
ReportMemoryLeaksOnShutdown := True;					
Die bewirkt, dass bei der Ausführung aus Delphi heraus Speicherlecks angezeigt werden. Da sollte beim Beenden, nachdem du möglichst alle Funktionen benutzt hast, keine Meldung kommen.


Da sagt er mir undefinierter bezeichner ReportMemoryLeaksOnShutdown ?!?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 21.07.09 14:29 
user profile iconavenger hat folgendes geschrieben Zum zitierten Posting springen:
Da sagt er mir undefinierter bezeichner ReportMemoryLeaksOnShutdown ?!?
Dann hast du noch eine sehr alte Version von Delphi, in der noch der alte langsame Speichermanager ohne eine solche Überprüfungsmöglichkeit drin ist (D2005, D7, oder noch älter). Da gibt es eine solche Funktion in Delphi noch nicht.

Da kannst du nur z.B. FastMM manuell installieren und in das Projekt einbauen.
avenger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Di 21.07.09 14:32 
Ja ich nutze D7.....

Dann wer ich das jetzt mal mal nach FastMM googlen !
avenger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Di 21.07.09 15:24 
Bräuchte nochmal deine Hilfe mit FastMM !!

Hab das jetzt soweit eingebunden und bekomme bei starten der Anwendung den Fehler das es nicht installiert werden konnte und es erste unit in der Projectdatei stehen muss.

Meine Projectdatei wurde ja von Delphi erzeugt, was muss ich ändern damit FastMM die Allererste unit in der Projectdatei ist ?!?
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 21.07.09 15:26 
user profile iconavenger hat folgendes geschrieben Zum zitierten Posting springen:
Meine Projectdatei wurde ja von Delphi erzeugt, was muss ich ändern damit FastMM die Allererste unit in der Projectdatei ist ?!?

Diese dort eintragen, an erster Stelle?

_________________
PROGRAMMER: A device for converting coffee into software.


Zuletzt bearbeitet von Xentar am Di 21.07.09 15:27, insgesamt 1-mal bearbeitet
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 21.07.09 15:26 
Öffne die *.dpr und trage FastMM4 als erste in der uses-Klausel ein.
avenger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Di 21.07.09 15:37 
Anscheinend bin ich dafür zu doof, der Compiler lässt mich das Project dann nicht mehr erzeugen. Hier ist der Projectquellext !!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
program Project1;

uses
  FastMM4, Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Settings},
  Unit3 in 'Unit3.pas' {Setup},
  FastMM4 in 'FastMM4.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TSettings, Settings);
  Application.CreateForm(TSetup, Setup);
  Application.Run;
end.


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 21.07.09 15:40 
Sieht richtig aus..
Problembeschreibung? Fehlermeldung?
Dem Compiler sollte das egal sein -> das Projekt kannst du immernoch kompilieren.

_________________
PROGRAMMER: A device for converting coffee into software.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 21.07.09 15:42 
Du hast FastMM4 doppelt in der uses drin. Du musst die nicht dem Projekt hinzufügen (letzte Zeile der uses), sondern nur ggf. das Verzeichnis dem Bibliothekspfad hinzufügen, in dem die Unit FastMM4 liegt. Dann reicht die erste Zeile der uses auch. ;-)

(Lösche einfach die letzte Zeile der uses und vergiss das Semikolon in der Zeile vorher dann nicht.)
avenger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Di 21.07.09 15:44 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Sieht richtig aus..
Problembeschreibung? Fehlermeldung?
Dem Compiler sollte das egal sein -> das Projekt kannst du immernoch kompilieren.


Fehler: Bezeichner redefiniert "FastMM4"

Der Compiler zeigt diese zeile Rot:
FastMM4 in 'FastMM4.pas';

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Du hast FastMM4 doppelt in der uses drin. Du musst die nicht dem Projekt hinzufügen (letzte Zeile der uses), sondern nur ggf. das Verzeichnis dem Bibliothekspfad hinzufügen, in dem die Unit FastMM4 liegt. Dann reicht die erste Zeile der uses auch. ;-)

(Lösche einfach die letzte Zeile der uses und vergiss das Semikolon in der Zeile vorher dann nicht.)


Danke, mit kleinen schritten zum Ziel :-)
avenger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Di 21.07.09 15:55 
So FastMM läuft schonmal. So nun wieder zum Ursprungsproblem. Folgende Meldung gibt mir FastMM nun beim schliessen der Anwednung. Sieht für mich aus als mache ich irgendwas grundsätzliches falsch, aber so ist das bei Blutigen anfängern :-)

bin für jeden Tip dankbar !
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 21.07.09 16:01 
Aaalso:
Erstens sehe ich da, dass es sich um ein Formular und Teile davon handelt. Zweitens, dass da eine kritische Sektion und eine Zugriffsverletzung dabei sind.

Folgerung:
Es tritt eine Zugriffsverletzung auf, und infolgedessen wird das Formular nicht freigegeben. Das Freigeben fehlt also vermutlich gar nicht.

Da dort eine kritische Sektion vorkommt, sind wir wieder beim Thema Multithreading. Ich sagte ja, dass das mit dem Speicherleck und so erst nach dem Überprüfen von Threads gemacht werden sollte. Denn Threads wie user profile iconXentar ja meinte, wären auch sehr typisch für einen solchen Fehler und sind oft leichter zu prüfen als Speicherlecks.

Deshalb erneut user profile iconXentars Frage:
Benutzt du Multithreading? Und greifst du auf Formularelemente aus dem Thread zu? Vielleicht fälschlicherweise ohne Synchronisierung?
avenger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Di 21.07.09 16:08 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

nein, ich nutze kein Multithreading !
Ich eine Komponente die Daten aus einem Automatisierungssystem zieht und zyklich über einen Timerinterval aufgerufen wird.