![]() |
Debugger-Exception
Moin,
beim verlassen meines Programmes (Schliessen durch X im Fensterrahmen) bekomme ich eine Exception der Klasse $C0000005. Ich nehme an das das etwas mit der Mailroutine zu tun hat die ich nutze da ich das vorher nicht hatte. Leider verstehe ich bei solchen Dingen aber nur Bahnhof und die Routine ist zugegebenermaßen Copy+Paste. Kann trotzdem jemand einmal kucken ob da noch etwas freigegeben werden muss. Danke !! Hans
Delphi-Quellcode:
function TUMailen.SendeMail(MailEmpfaenger, CCListe, Betreff, Anhang :string; Body :TStringList; MailAbsender, MailPasswort, MailServer: String; MailPort: Integer) : boolean;
var iAttachment : TIdAttachment; Erfolg: Boolean; begin (* Connect mit Server *) UMailen.IdSMTP1.AuthType := satDefault; // simpler Login ohne Authentifizierung UMailen.IdSMTP1.Host := MailServer; UMailen.IdSMTP1.Port := MailPort; UMailen.IdSMTP1.UseTLS := utUseRequireTLS; // mit SSL -> Port dann in aller Regel 587 UMailen.IdSMTP1.Username := MailAbsender; // Benutzername UMailen.IdSMTP1.Password := MailPasswort; // Passwort // Verbinden mit Server try UMailen.IdSMTP1.Connect; except on E: Exception do begin result := false; Application.MessageBox (PChar(E.Message),'Verbindungsfehler Connect !',MB_OK); UMailen.IdSMTP1.Disconnect; exit; end; end; (* Mail erstellen *) UMailen.IdMessage1.ContentType := 'multipart/*'; // mit Anhang! if Anhang <> '' then iAttachment := TIdAttachmentFile.Create(UMailen.IdMessage1.MessageParts, Anhang) ; UMailen.IdMessage1.Body.Assign(Body); // der eigentliche eMail -Text aus einem TMemo UMailen.IdMessage1.Priority := TIdMessagePriority(2); // Priorität UMailen.IdMessage1.Recipients.EMailAddresses := MailEmpfaenger; // Empfängeradresse UMailen.IdMessage1.ReplyTo.EMailAddresses := MailAbsender; // Anwortadresse UMailen.IdMessage1.From.Text := MailAbsender; // Absenderadresse UMailen.IdMessage1.Subject := Betreff; try UMailen.IdSMTP1.Send(UMailen.IdMessage1); except on E: Exception do begin result := false; Application.MessageBox (PChar(E.Message),'Verbindungsfehler Versand !',MB_OK); UMailen.IdSMTP1.Disconnect; exit; end; end; result := true; end; |
AW: Debugger-Exception
Soweit ich das überblick wird TIdAttachmentFile zwar u.U. angelegt, aber nirgends freigegeben.
|
AW: Debugger-Exception
Zitat:
|
AW: Debugger-Exception
Stop -es kann nicht an der Routine liegen - auch wenn ich die auskommentiere kommt die exception. Dann suche ich mal weiter :-(
Hans |
AW: Debugger-Exception
![]() siehe Windows.pas
Delphi-Quellcode:
PS: bezüglich Copy&Paste
{ Error code definitions for the Win32 API functions }
Man kann Fehlermeldungen auch kopieren und hier als Text einfügen, damit alle Infos hier landen. Im Delphi-Logfenster oder bei allen Dialogen Strg+C und dann hier im Editor Strg+V :zwinker: Tipp: In OnCloseQuery, OnClose oder OnDestroy einen Haltepunkt rein, das Fenster schließen und dann schrittweise durchgehn bis es kanllt. Falls der Debugger hier wirklich nicht die richtige Fehlerstelle direkt anzeigt. |
AW: Debugger-Exception
Danke für die Info .. und vor allem für den Tip. Im Moment werde ich gerade wahnsinnig - es knallt zur Zeit gar nicht. :-(
Sobald es wieder passiert melde ich mich. Hans |
AW: Debugger-Exception
---------------------------
Benachrichtigung über Debugger-Exception --------------------------- Im Projekt MahnProjekt.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x74e342b0: read of address 0x006f64d0' aufgetreten. Wenn ich einen Haltepunkt in der FormClose setze dann geht er brav dahin und dann noch die ganze .dpr-Datei durch bin zum end.:
Delphi-Quellcode:
Mein Fehler irgendwo - ganz klar. Ich habe nur keine Ahnung wonach oder wo ich suchen sollte :-(
begin
Application.Initialize; Application.CreateForm(TMahnForm, MahnForm); Application.CreateForm(TUKunden, UKunden); Application.CreateForm(TUKunden, UKunden); Application.CreateForm(TUDrucken, UDrucken); Application.CreateForm(TUProtokoll, UProtokoll); Application.CreateForm(TUMailen, UMailen); Application.Run; end. Gruß Hans |
AW: Debugger-Exception
Nach diesem END. kommen nur noch die Finalization-Abschnitte aller eingebundenen Units.
Um dort zu Debuggen müsste man die Debuginfos der VCL und RTL aktivieren. > Projektoptionen > Delphi-Compiler > Compilieren > Mit Debug-DCUs Geht natürlich nur mit einem Delphi ab Professional, wegen der nötigen Quellcodes. (ansonsten bliebe nur noch der Spaß das im Assembler zu debuggen :stupid:) Ich würde erstmal auf die Units Forms, Controls, Graphics und SysUtils tippen (da ist das Meiste bezüglich VCL drin, was beim Beenden abgearbeitet wird) Gut, dann hier den Haltepunkt auf's END (muß man davor ja nicht nochmal alles durchlaufen) und dann ab da weiter. :) Wenn die Code-Position $74e342b0 und Speicherposition $006f64d0 immer etwa gleich sind, wenn du es mehrmals versuchst, dann könnte man im OnClose oder spätestens beim END. mal an diesen Adressen nachsehen, was sich dort befindent. Die Speicheradresse natürlich möglichst früh, so lange dort noch etwas existiert. Ich tippe mal darauf, dass an Adresse $006f64d0 nichts mehr existiert (nicht "mehr" zugewiesener Speicherbereich) und es deswegen dann knallt. Bzw. auf oder kurz vor die Adresse $74e342b0 einen Haltepunkt legen. (im CPU-Fenster des Debuggers, also im Assembler) Bevor es knallt, hat der Debugger meistens bessere Ergebnisse, beim Versuch den Stacktrace abzurufen. |
AW: Debugger-Exception
Hallo,
arbeitest du mit Interfaces? Ich würde mal MadExcept nehmen und mit DebugDCUs einstellen. |
AW: Debugger-Exception
Ok, das wird natürlich spannend - ich habe kein Prof. und kann daher den Source auch nicht debuggen.
Ich versuche morgen mal durch auskommender es der ganzen Mailunit ob das wirklich am mailen liegt. Und dann sehen wir weiter ... vielleicht kann ich so feststellen warum es knallt. Gruß Hans |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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