Frage

In Delphi 2009 erzeugt mein Programm jetzt einen Fehler "Listenindex aus den Grenzen". Es erzeugt eine Popup -Box:

alt text
(Quelle: Sehengenealogy.com)

Ich verwende die Konfiguration "Debug" Build -Konfiguration, bei der die Überprüfung des Laufzeitfehlers eingeschaltet ist. Dies erfasst jedoch nicht den Fehler, bevor er passiert.

Gibt es eine einfache Möglichkeit, die Quelle dieses Fehlers in meinem Programm zu finden, ohne die Haltepunkte einzulegen und durch Versuch und Irrtum einzugrenzen?

War es hilfreich?

Lösung

Haben Sie "Stop on Delphi -Ausnahmen" eingeschaltet? (Tools Debugger -Optionen Sprachausnahmen [Delphi7]) Andernfalls wird es nicht in Ihrem Sourcecode eingebrochen.

Stellen Sie außerdem sicher, dass Elisterror nicht in Ihrer Liste "Ausnahmetypen zum Ignorieren" ist. Diese Liste finden Sie auch bei Tools Debugger -Optionen Sprachausnahmen (Delphi 7).

Andere Tipps

Madexcept (frei) oder Eurekalog (bezahlt) kann helfen. Sie können sie einrichten, um eine Stapelverfolgung anzuzeigen/per E -Mail zu senden, wenn ein Fehler auftritt. Ich benutze Eurekalog in all meinen Projekten und es ist von unschätzbarem Wert, um diese Art von Dingen zu beheben.

Hey, du brauchst keine zusätzlichen Tools, um dies zu verfolgen! :)

Führen Sie einfach Ihre Bewerbung unter Debugger aus und stellen Sie sicher, dass "Ausnahmen in Delphi anhalten" (oder was auch immer sie in der Version Ihres Delphi genannt wird). AN.

Wenn eine Ausnahme eintritt - wird es eine Benachrichtigung von Debugger geben. Drücken Sie "OK"/"Debug" -Taste und anzeigen Sie einfach den Anrufstapel. Das Call -Stack -Fenster wird in der aktuellen Version von Delphi automatisch angezeigt. Wenn Sie es nicht sehen können, gehen Sie zu "Ansicht"/"Debugge Windows"/"Call Stack".

Das ist alles. Der Anrufstack verweist Sie auf den genauen Ort des Problems. Kein zusätzliches Werkzeug benötigt.

Diese Tools (Eurekalog, JCL oder Madexcept) werden benötigt, wenn Sie Ihr Programm unter den Benutzern verteilen und Fehlerberichte über Probleme auf der Kundenseite sammeln möchten. Dh es gibt keinen Debugger, um das Problem zu überprüfen.

Da dies ein RTL/VCL -Fehler ist, haben Sie häufig ein besseres Breaking/CallStack -Verhalten, wenn Sie Debug -DCUs (und wieder aufbauen) aktivieren.

Irgendwelche Hinweise, was Ihre Bewerbung tut, wenn dies geschieht? Eine lange Schleife? Eine Schaltfläche Klicken?

Wenn sich die Anwendung anhält und Sie sich das Call -Stack -Debug -Fenster ansehen, können Sie den Rückruf zum letzten Anruf von Ihrem Code zurückverfolgen? Der Anrufstack sagt Ihnen nicht alle Bedingungen, sondern kann den Standort eingrenzen.

Sobald Sie den Anruf eingegrenzt haben, wie ein Protokollierungswerkzeug wie Codesit Kann wirklich nützlich sein. Zum Beispiel log ich häufig Schleifensteuervariablen ab, um herauszufinden, welche Iteration vor dem Fehler zuletzt auftritt. Dann geht es darum, wahrscheinliche Verdächtige zu identifizieren.

Für Listbox, TStrings, bedeutet ..., dass der Index über die Liste der Liste hinausgeht. . Beispiel für tstring-> strnigs [?]; [?] Ist <0 oder> (TString-> count-1) aus den Grenzen ergeben.

Was NMPOP3 usw. betrifft ... Wenn Sie POP3Client verwenden, um E -Mails abzurufen, gibt es ein Fehler für einige Unix/? POP3 -Server, dass ich damit begegnet bin, um E -Mails von Mail zu holen.???.com, aber mit einigen in Ordnung.

Endlich muss ich meine POP3Client -Anwendung mit Tclientsocket anstelle von tnmpop3 neu schreiben. Jetzt funktioniert mit jedem der POP3Server, mit dem ich verbunden bin.

Hoffe diese Hilfe und viel Glück

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top