¿Cómo puedo encontrar la ubicación de un “índice de lista fuera de límites” error en Delphi

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

Pregunta

En Delphi 2009, mi programa ahora se produce un "índice de lista fuera de límites" error. Genera un cuadro emergente:

alt text
(fuente: beholdgenealogy.com )

Estoy usando la "depuración" Construir configuración que ha activado la comprobación de todo el error de tiempo de ejecución. Pero esto no captura el error antes de que suceda.

¿Hay alguna forma sencilla de localizar el origen de este error en mi programa sin tener que poner en los puntos de interrupción y limitar la búsqueda por ensayo y error?

¿Fue útil?

Solución

¿Tiene un "Parar con las Excepciones de Delphi" la posición ON? (Herramientas \ Opciones del depurador excepciones \ idioma [Delphi7]) De lo contrario, no se romperá en su código fuente.

También asegúrese de que EListError no está en sus "tipos de excepción a Ignorar" lista. Esta lista también se encuentra en Herramientas \ Opciones del depurador excepciones \ Idioma (Delphi 7).

Otros consejos

madExcept (libre) o EurekaLog (pagado) puede ayudar. Puede configurarlas para mostrar / enviar por correo electrónico un seguimiento de pila cuando se produce un error. Yo uso EurekaLog en todos mis proyectos y es muy valiosa para la fijación de este tipo de cosas.

¡Eh, que no necesita ninguna herramienta adicional para realizar un seguimiento de esto! :)

Sólo tiene que ejecutar su aplicación bajo el depurador y asegúrese de que "Parar con las Excepciones de Delphi" (o lo que se llama en la versión de tu Delphi) está activada ON .

Cuando se produce una excepción - habrá una notificación del depurador. Pulse el botón "OK" / "depuración" y simplemente ver la pila de llamadas. ventana de pila de llamadas se muestra automáticamente en la versión reciente de Delphi. Si no puede verlo -. Ir a "Vista" / "depuración de Windows" / "pila de llamadas"

Eso es todo. La pila de llamadas le apuntan en la ubicación exacta del problema . No hay ninguna herramienta adicional necesaria.

Estas herramientas (EurekaLog, JCL o madExcept) son necesarios si distribuye su programa entre los usuarios y desea obtener correcciones de informes sobre problemas en el lado del cliente. Es decir. no hay ningún depurador para comprobar el problema.

Como se trata de un error RTL / VCL, que a menudo terminan con un mejor comportamiento de ruptura / pila de llamadas si se habilita la depuración de DCU (y reconstruir).

¿Alguna pista de lo que está haciendo su aplicación cuando esto ocurre? Un bucle largo? Un clic de botón?

Cuando se detiene la aplicación y nos fijamos en la ventana de depuración pila de llamadas, se puede rastrear la llamada de nuevo a la última llamada de su código? La pila de llamadas no le dirá todas las condiciones, pero puede reducir la ubicación.

Una vez que reducir la llamada, una herramienta de registro como CodeSite puede ser realmente útil. Por ejemplo, a menudo conecto variables de control de bucle de averiguar qué iteración se produce antes de que el último error, entonces es una cuestión de identificar probables sospechosos.

de cuadro de lista, TStrings, ... significa que el índice se encuentra más allá de la lista-> recuento,. . ejemplo de tString-> strnigs [?]; [?] Es <0 o> (tString-> contar-1) resultará de error límites.

En cuanto a NMPop3, etc, ... si el uso pop3client para ir a buscar el correo electrónico, que tiene un bugs a algunos UNIX /? servidor POP3, que he encontré usarlo en busca de correo electrónico de mail.???.com pero está bien con algunos.

Por fin tengo que volver a escribir mi solicitud pop3client con TClientSocket en lugar de tnmpop3. ahora trabaja con todas las de la Pop3Server que he conectado a.

esperanza esta ayuda y buena suerte

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top