Come faccio a trovare la posizione di un “indice di lista fuori dai limiti” errore di Delphi

StackOverflow https://stackoverflow.com/questions/1191604

Domanda

In Delphi 2009, il mio programma ora produce un "indice di lista fuori dai limiti" errore. Esso genera una finestra di popup:

alt text
(fonte: beholdgenealogy.com )

sto usando il "debug" Costruire configurazione che è checking acceso tutto l'errore di runtime. Ma questo non cattura l'errore prima che accada.

C'è un modo semplice per individuare la fonte di questo errore nel mio programma, senza dover mettere in punti di interruzione e restringere il campo per tentativi ed errori?

È stato utile?

Soluzione

Avete "Stop su Eccezioni Delphi" acceso? (Tools \ Opzioni Debugger eccezioni \ lingua [Delphi7]) altrimenti si rompono nel vostro codice sorgente.

Assicurarsi inoltre che EListError non è nelle tue "Tipi di eccezione a ignorare" lista. Questo elenco si trova anche in Strumenti \ Eccezioni Opzioni Debugger \ lingua (Delphi 7).

Altri suggerimenti

MadExcept (gratuito) o EurekaLog (a pagamento) può aiutare. È possibile impostare fino a vedere / e-mail una traccia dello stack quando si verifica un errore. Io uso EurekaLog in tutti i miei progetti ed è prezioso per il fissaggio di questo tipo di cose.

Ehi, non hai bisogno di strumenti aggiuntivi per tracciare questa! :)

Basta lanciare l'applicazione sotto debugger e fare in modo che "Stop su Eccezioni Delphi" (o quello che viene chiamato nella versione di Delphi) è attivata ON .

Quando si verifica un'eccezione - ci sarà una notifica da debugger. Premere il pulsante "Ok" / "Debug" e solo visualizzare lo stack di chiamate. finestra stack di chiamate viene visualizzato automaticamente in versione recente di Delphi. Se non è possibile vedere -. Andare a "Visualizza" / "Debug Windows" / "Call Stack"

Questo è tutto. Lo stack di chiamate vi punto nella posizione esatta del problema . Nessun ulteriore strumento necessario.

Questi strumenti (EurekaLog, JCL o MadExcept) sono necessari se si distribuisce il vostro programma tra gli utenti e desidera raccogliere segnalazioni di bug su problemi sul lato client. Cioè non v'è alcun debugger per controllare il problema.

Poiché si tratta di un errore di RTL / VCL, spesso si finisce con una migliore comportamento di rottura / stack se si attiva Debug DCU di (e ricostruire).

Eventuali suggerimenti che cosa FARE dell'applicazione quando questo accade? Un lungo ciclo? Un clic del pulsante?

Quando le fermate di applicazione e si guarda alla finestra di debug stack di chiamate, si può rintracciare la chiamata di nuovo all'ultima chiamata dal codice? Lo stack di chiamate non vi dirà tutte le condizioni, ma può restringere la posizione.

Una volta a restringere la chiamata, uno strumento di registrazione come CodeSite può essere veramente utile. Per esempio, ho spesso accedo variabili di controllo del ciclo di capire quale iterazione posta per ultima prima dell'errore, quindi è una questione di individuare probabili sospetti.

per casella di riepilogo, TStrings, ... significa che l'indice è oltre la list-> conteggio,. . esempio di tString-> strnigs [?]; [?] È <0 o> (tString-> count-1) si tradurrà di errore dai limiti.

Per quanto riguarda NMPop3, ecc, ... se l'uso pop3client per recuperare e-mail, ha un bug in una certa unix /? server POP3, che mi sono imbattuto in usarlo per andare a prendere e-mail da mail.???.com ma ok con un po '.

alla fine devo riscrivere la mia domanda pop3client con tclientsocket invece di tnmpop3. ora funziona con ogni del Pop3Server che ho collegato a.

speranza questo aiuto e buona fortuna

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top