AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

AV beim beenden

Ein Thema von Meta777 · begonnen am 22. Aug 2006 · letzter Beitrag vom 20. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AV beim beenden

  Alt 22. Aug 2006, 11:51
Hallo DP

kennt jemand das Problem das beim Beenden eines Progs sporadisch Access-Violations auftreten?
Wir ham grad solche Probleme und es nervt, da man teilweise die Progs dann übern TaskMgr killen muss...
Da dieses Problem auch relativ selten auftritt läßt es sich nur schwer mit laufenden Debugger reproduzieren.
Unser letzter Versuch dies zu beheben war ein Halt() in MainForm.Destroy, jedoch ohne Erfolg...

Wenn ihr Tipps oder sogar Lösungen anbieten könnt - immer her damit

Shalom

Edit: Ist natürlich Win32....
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: AV beim beenden

  Alt 22. Aug 2006, 12:01
Bei AVs gibt es meiner Erfahrung nach zwei Gründe:
- es wird auf Elemente/Objekte zugrgriffen, die schon längst zerstört sind
- es werden bei Programmende nicht alle Objekte wieder sauber freigegeben

Hast Du aber Runtime-Errors, dann ist meistens das (nicht eingebundene) ShareMem daran schuld.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: AV beim beenden

  Alt 22. Aug 2006, 12:16
Es handelt sich nicht wirklich um eine .Net-Anwendung, oder?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: AV beim beenden

  Alt 22. Aug 2006, 12:31
Zitat von RavenIV:
Bei AVs gibt es meiner Erfahrung nach zwei Gründe:
- es wird auf Elemente/Objekte zugrgriffen, die schon längst zerstört sind
- es werden bei Programmende nicht alle Objekte wieder sauber freigegeben

Hast Du aber Runtime-Errors, dann ist meistens das (nicht eingebundene) ShareMem daran schuld.
Also nach dem AVs kamen auch immer eine Runtime Error Meldung. Was genau meinst du mit nicht eingebundenen ShareMem?? Soll die Unit ShareMem eingebunden werden, oder wie? Wofür ist die gut. Ok, Share Mem (Speicher teilen) sagt über sich selbst schon einiges. Aber warum brauchen wir das bei uns?

@Khabarakh:
War 'n Verklicker. Ist natürlich Win32.
  Mit Zitat antworten Zitat
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#5

Re: AV beim beenden

  Alt 22. Aug 2006, 12:37
Mir ist so was früher immer bei Timern passiert. Wenn die sich selber wieder starten dann kann es beim beenden mächtig rappeln.

Schau dir mal den madexcept an, der hat mir da immer geholfen um zu finden wo es passiert
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: AV beim beenden

  Alt 22. Aug 2006, 12:51
Sobald Du irgendwas mit DLLs machst und parameter übergibst, ist es empfohlen, in allen .dpr die ShareMem als erste Unit einzubinden.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: AV beim beenden

  Alt 22. Aug 2006, 15:56
Zitat von RavenIV:
Sobald Du irgendwas mit DLLs machst und parameter übergibst, ist es empfohlen, in allen .dpr die ShareMem als erste Unit einzubinden.
Achso, aber das trifft doch nur zu wenn man String-Parameter benutzt, oder? Das ist aber bei uns nicht der Fall. Wir benutzen zwar DLLs aber die sind nicht von uns...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: AV beim beenden

  Alt 22. Aug 2006, 16:21
Moin Meta777,

ausser den genannten Tips solltest Du in den Projektoptionen auch einmal die Bereichsprüfung aktivieren.
Das Problem kann auch auftreten, wenn Grenzen von Arrays überschritten werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

Re: AV beim beenden

  Alt 18. Sep 2006, 22:17
Hallihallo....

Wir haben nun folgende Lösung umsetzen müssen:

Delphi-Quellcode:
function daForceSelfTerminate: Boolean;
//2006_09_14 Code der nach daForceSelfTerminate() steht wird nicht ausgeführ
//wenn daForceSelfTerminate() TRUE zurück gibt...
var
  h: Cardinal;
begin
  Result := False;
  h := OpenProcess(PROCESS_TERMINATE, False, GetCurrentProcessId);
  if (h <> 0) then
    Result := TerminateProcess(h, 0);
end;
Allerdings gefällt mir diese Lösung nicht wirklich...
Ich habe Bedenken dass es unter älteren Windows-Versionen (Win9x/ME) vielleicht Probleme mit der Speicherbereinigung geben könnte?
Unter NT/2K/XP hoffe ich das so etwas nicht der Fall ist.
Könntet ihr mir jedoch sagen ob meine Befürchtungen begründet sind oder eher nicht?

Vielen Dank

Shalom & Gottes Segen

PS: Das Ausschalten der Bereichsprüfung hatte unangenehme folgen, da einige Routinen (unter anderen Hagen's DEC und Zeichenmethoden) nicht mehr liefen... Also haben wir die Bereichprüfung wieder deaktivieren müssen...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: AV beim beenden

  Alt 18. Sep 2006, 22:26
anstelle von OpenProcess kann man auch gleich GetCurrentProcess nutzen. Aber wie bereits weiter oben erwähnt wird kommen AV's beim beenden in aller Regel zustande weil auf bereits zerstörte Elemente zugegriffen wird. Wenn man zum Beispiel eine Server oder Client-Komponenten hat und im Destroy die Verbindung trennt und dann darauf in Events reagiert kann es schnell zu AV's kommen (wenn man zum Beispiel schon dinge frei gegeben hat welche in einem OnChange angesprochen werden). Auch bei Listviews etc. kommt es schnell mal vor wenn man das OnChange nutzt. Denn wenn das Listview frei gegeben wird und nochmal gecleart wird kommt man in's onChange wo man auf dinge zugreift die zu dem Zeitpunkt wohlmöglich schon zerstört sind.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 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