![]() |
Listenindex überschrietet das Maximum -> Welche Liste?
Hey,
wenn der Debugger (kommt das überhaupt vom Debugger?) die Fehlermeldung "Listendindex überschreitet das Maximum(...)" ausgibt, ist es dann möglich herauszufinden, um welche Liste es sich handelt, ohne (ewig ;)) den Quelltext durchforsten zu müssen? Oder weiß der Debugger selber nicht, um welche Liste es sich handelt? Das würde häufig viel Zeit ersparen, vor allem, wenn es sich um Programme handelt, die nicht wirklich prozedual aufgebaut sind, weil durch einen Timer (z.B. das OnIdle) ständig etwas aufgerufen wird. Ich denkmal nicht, dass es möglich ist, denn sonst würde es ja in der Fehlermeldung stehen, aber Fragen schadet ja nie... P.S.: Diese Art der Fehlermeldung kommt ja irgendwann in der Laufzeit, wer sendet sie also? Das Programm selber oder der Delphi-Debugger oder wer? |
Re: Listenindex überschrietet das Maximum -> Welche Liste
Eigentlcih sollte der Debugger das abfangen und dir die Möglichkeit geben, direkt in die entsprechende Zeile zu springen.
Ansonsten einfach ein paar Breakpoints machen, dann kannst du den fehler mit Heron eingrenzen :mrgreen: |
Re: Listenindex überschrietet das Maximum -> Welche Liste
Zitat:
Breakpoints machen das häufig nur geringfügig einfacher, wenn wie gesagt vieles so ziemlich gleichzeitig geschieht. |
Re: Listenindex überschrietet das Maximum -> Welche Liste
hmm.... du musst doch ungefähr wissen, wann dein programm auf welche liste zugreift.
aber hast du eventuell dem debugger gesagt, er soll "EListIndexOutOfBounds" ignorieren? (Wo ging das gleich noch mal? ;) muss irgendwo in den projektoptionen stehen) |
Re: Listenindex überschrietet das Maximum -> Welche Liste
Die Liste hat keinen Namen, denn es ist keine Komponente.
Der Debugger kennt nur den Zeiger auf das Objekt. Er könnte dir den Klassennamen ([TObject].Classname) mitteilen, aber das hat Borland leider versäumt (vielleicht um die Benutzer nicht zu sehr zu verwirren). ==> Hier hilft nur debuggen: Programm bis zur Exception rennen lassen. Aufrufstack mit STRG-ALT-S anzeigen und dann mit Einzelschritt weiter. |
Re: Listenindex überschrietet das Maximum -> Welche Liste
Zitat:
Vielleicht hab ich dem Debugger echt mal gesagt, er solle "EListIndexOutOfBounds" ignoerieren? Ich finde die Einstellung gerade nicht, wenn jemand auf die schnelle weiß, wo ich das in Delphi2005 einstellen kann wäre ich dankbar. Zitat:
|
Re: Listenindex überschrietet das Maximum -> Welche Liste
Bei der Fehlermeldung "Listenindex überschreitet das Maximum" (die auch schon häufig bekam) hat es sich bei mir darum gehandelt, dass ich auf ein Element in einer Liste zugegriffen habe was es gar nicht gab.
Z.B.: Liste mit 5 Elementen - Zugriff auf Element 6 oder -1 |
Re: Listenindex überschrietet das Maximum -> Welche Liste
das wissen wir schon. aber trotzdem danke.
nochmal: kannst du die meldung mal posten? wenn die meldung kommt, einfach strg+c. |
Re: Listenindex überschrietet das Maximum -> Welche Liste
Zitat:
Zitat:
|
Re: Listenindex überschrietet das Maximum -> Welche Liste
Wie viele (String)Listen hast du denn in deinem Programm, dass du nicht weißt welche es ist?
|
Re: Listenindex überschrietet das Maximum -> Welche Liste
OK, das ist genau die Standard-Exception-Meldung, die du NICHT kriegen solltest, der Debugger sollte zuvor eine ähnliche meldung bringen, die dir aber die Möglichkeiten "Programm anhalten" und "Programm fortsetzen" anbietet.
|
Re: Listenindex überschrietet das Maximum -> Welche Liste
@Luckie
Es handelt sich um TObjectList. Ich programmiere ein Spiel, dass vom Codeumfang für meine Verhältnisse schon ziemlich komplex ist (~1500 selbstgeschriebene Zeilen). Da ich für jeden Objekttypen eine eigene Liste habe sind es 8Listen. 2davon müssen auch über OpenGL abgebildet werden und es muss ständig auf Kollision etc. überprüft werden und die Objekte müssen sich bewegen, dies alles geschieht im OnIdle. Deshalb vermute ich, dass irgendwo beim Löschen noch auf die Liste zugegriffen wird, was dann in einer Exception endet, denn eigentlich überprüfe ich natürlich vor jedem Zugriff die Länge der Listen. Zitat:
Edit: Manchmal kommt die hier: Zitat:
|
Re: Listenindex überschrietet das Maximum -> Welche Liste
das is komisch... also die debugger-meldung sollte immer zuerst kommen... aufhängen sollte es sich natürlich auch nicht ^^
Kannst du mal folgendes probieren: - exception auslösen, so dass das (standard-) fenster kommt - in die ide wechseln - "Programm anhalten" (nicht zurücksetzen!) - Callstack ansehen ( evtl. mit strg+shift+C aufrufen) Weisst du, was der callstack ist? eine kurze suche im forum sollte dir das auch sagen ;) |
Re: Listenindex überschrietet das Maximum -> Welche Liste
Zitat:
Der Callstack sieht so aus: Zitat:
Edit: Ich solltte mich wohl mal ernsthaft mit Debugging auseinander setzen! |
Re: Listenindex überschrietet das Maximum -> Welche Liste
der callstack sollte länger sein! da solltest du irgendwann zu der methode kommen, in der TList.get aufgerufen wird....
(wenns blöd läuft, kommst du nur zu DefWndProc ^^) |
Re: Listenindex überschrietet das Maximum -> Welche Liste
edit5: Vergesst, was hier stand, das war vermutlich Unsinn und da blickt sowieso keiner durch.
Wie kann es denn sein, dass bei einigen Exceptions die Zeile und alles angezeigt werden und manchmal gar nicht? Wenn ich nämlich andere Listen lösche, dann wird die Zeile angezeigt - aber auch nicht bei allen! Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 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