![]() |
Debuggen im CPU Fenster
Hallo,
nachdem ich auf Windows XP umgestiegen bin, lösen meine Programme jedesmal eine Exception aus, wenn ich das Programm schließe. Der Effekt tritt nur auf, wenn das Prg von der IDE aus gestartet wird. Als Verantwortlichen konnte ich die Komponente TdxBarManager von Developer Express ausmachen (das Problem kann dort nicht reproduziert werden). Soweit ich das mit normalem Debugging verfolgen konnte, wird sämtlicher Code bis zum "end." des Projekt-Codes ohne Probleme abgearbeitet. Wenn ich dort einen Breakpoint setze, und mit Einzelschritt durch den Source gehe, lande ich in "HelpIntfs". Dort geht es dann in die folgenden letzten Zeilen:
Code:
Nach Abarbeitung des "end." erscheint das CPU Fenster (der Source o.a. Komponente ist vorhanden und auch korrekt eingetragen). Die Meldung der Exception lautet:
initialization
finalization if Assigned(HelpManager) then HelpManager := nil; end. In Projekt D:\Projekte Delphi\Sample.exe trat ein Problem mit folgender Meldung auf: 'Anwendungsdefinierte Excpetion (Code 0xc0000008) bei 0x77f410a2'. Prozeß angehalten. Mit Einzelne Anweisung oder Start fortsetzen. Weiß jemand, mit welchen Mitteln ich das Problem lokalisieren bzw. lösen kann? Gruß, harrybo |
Hi,
was ist denn HelpInfts? Ober besser gesagt "Help-Manager"? Ich kann sonst keinen Fehler finden (vielleicht solltest du noch ein wenig mehr Source zeigen)... Chris |
Moin Harrybo,
sollte es sich bei "Helpmanager" um ein Objekt handeln, müsste dieses mit
Delphi-Quellcode:
freigegeben werden.
Helpmanager.Free;
Helpmanager := nil; // bzw. FreeAndNil(Helpmanager); Ansonsten ist, zumindest in dem von Dir gezeigten Codeabschnitt kein Fehler auszumachen. |
Hallo Chris, hallo Chris,
erst mal danke für Eure prompte Antwort. Ich würde gerne mehr Code zeigen, allein es gibt ja keinen. Ich kann einen Breakpoint im Quellcode des Projekts auf die letzte Zeile, also "end." setzen.
Code:
Verlasse ich das Programm, hält der Debugger dort ordnungsgemäß. Beim Weiter steppen (F7) konnte ich dann sehen, dass noch Code aus HelpIntf.pas abgearbeitet wird, weiß aber mittlerweile, dass hier alles in Ordnung ist und erst später an anderer Stelle die Exception ausgelöst wird - allerdings liegt dazu kein Code vor, so dass das CPU Fenster aufpoppt. Den Pfad $Delphi\Source\Vcl habe ich testweise eingebunden, ohne Erfolg. Gibt es eine Möglichkeit, herauszubekommen, wo, z.B. in welcher Unit, das Problem auftritt?
program Project1;
uses Forms, sample in 'sample.pas' {frmSample}; {$R *.res} begin Application.Initialize; Application.CreateForm(TfrmSample, frmSample); Application.Run; end. // hier Breakpoint gesetzt gruß, harrybo |
Moin Harrybo,
hast Du denn auch mal versucht, das Objekt korrekt freizugeben? |
Tschuldige Chris, habe ich vergessen, zu erwähnen. Ich habe das natürlich gleich getestet, ohne Erfolg allerdings. Ich habe dann die Pfade zu den Sources von Delphi und den von mir verwendeten Komponenten im Bibliothekspfad eingetragen, und bin beim Debuggen dann über die HelpIntfs.pas hinaus in andere Units gekommen gekommen. Dort werden die erzeugten Objekte ebenfalls korrekt freigegeben. Ich denke mittlerweile, dass die Exception keine Delphi- sondern eine Win-Exception ist, ich mich also bereits in Windows Code befinde.
Vielleicht hat ja noch jemand eine Idee - ich melde mich auf jeden Fall, sobald ich das Problem gelöst habe. gruß, harrybo |
Moin Harrybo,
der Fehler sagt ja aus: ERROR_NOT_ENOUGH_MEMORY Das einzige was mich an der Fehlermeldung ein wenig stört, ist die Meldung "Anwendungsdefiniert". und die Adresse liegt im Bereich der geladenen System DLLs (vermutlich Kernel32.dll) Vielleicht kommst Du weiter, wenn Du von vorn herein im CPU Fenster debuggst (STRG-ALT-C). Dann könntest Du sehen, bei Aufruf welcher API Funktion der Fehler auftritt. Übrigens, mal unabhängig vom auftretenden Fehler: Durch die Zuweisung von nil lässt sich ein Objekt nicht freigeben. ;-) Free oder FreeAndNil ist erforderlich. |
hat ne Weile gedauert, aber ich hab's rausgefunden - mit MemProof (
![]() Mein Programm lädt die "c:\Windows\System32\AvmSnd.dll", die zur Installation der AVM Fritz Card gehört. Warum diese Datei geladen wird, und vor allem von wem, ist mir noch nicht klar. Auch andere hatten, so Google, bereits Probleme mit dieser Datei, die möglicherweise fehlerhaft ist. Zumindest ist das Problem beseitigt, sobald die dll umbenannt wird. Dies der Vollständigkeit halber. gruß, harrybo |
Re: Debuggen im CPU Fenster
Hi :-D
Das gleiche Problem habe (hatte) ich auch, dank deiner Hilfe hab ich´s nu nich mehr, weist du schon warum die AVMSND.DLL geladen wird ? |
Re: Debuggen im CPU Fenster
Ich glaubem das gleiche Problem habe ich auch.
Der Debugger von Delphi3 Prof. scheint auch darin 'hängen' zu bleiben, wenn man ein Programm welches aus der IDE gestartet wurde beendet: Der Objektinspektor kommt nicht mehr zum vorschein und obwohl alles den anschein hat, daß man nicht mehr im Runtime-Modus ist kiommt die Meldung der Debugger sei noch aktiv, wenn man Delphi beenden will. Komischerweise tritt der Fehler erst seit kurzem auf (hatte das Problem bisher noch nicht). Allerdings wurden die Fritz! - Treiber und die entsprechende Software seit längerem nicht mehr aktualisiert. Könnte sich hier ggf. ein Virus / Wurm / Trojaner als diese Fritz-DLL ausgeben? Zumal sie sich anscheinend vom Entwickler unbeabsichtigt einhängt. Hagen: Ne idee? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:42 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