violations solucion eaccessviolation delphi vb6 windows-vista crash access-violation

delphi - solucion - ¿Cómo saber quién está causando un error de violación de acceso?



access violations windows 7 (6)

Cuando el programa falla, Windows debería guardar un volcado de emergencia . A continuación, puede cargar esto en WinDbg o, en caso de necesidad, en Visual Studio. Hay varias formas de analizar el volcado para averiguar qué salió mal. Para empezar:

Recibo informes de que mi aplicación está causando un GPF en algunas máquinas de Vista. El mensaje de error es algo como esto:

violación de acceso en 0x75784062 (intentó escribir a 0x00000006)

Para arreglar esto, primero necesito saber exactamente quién está causando este GPF: mi exe principal, algún componente de terceros, uno de mis propios componentes activex, un dll, etc ...

¿Cómo puedo descubrir esto? ¿Qué herramientas pueden identificar el módulo exacto que causó este desastre?

Cualquier ayuda sería muy apreciada.

PD: mi aplicación está codificada en VB6 y mis controles ActiveX están escritos en Delphi 2007.


Mi sugerencia sería probar el texto del enlace MadExcept o el texto del enlace de Eurekalog. Estos capturan la excepción no controlada y producen un volcado de pila en el punto donde ocurre el problema.

Ningún enlace a estos más que como un cliente satisfecho. MadExcept me ha permitido rastrear y eliminar algunos problemas muy raros en mis programas.


Puede usar Process Monitor o Process Explorer, ambos desde el sitio SysInternals .


Recomendaría algún tipo de Exception-hook, como Eurekalog o madExcept, que te da un buen callstack cuando se producen excepciones.

Ahora esto quiere ayudarte mucho ahora, de cource ...

No he tenido suerte con el diálogo ''Encontrar error''. En términos generales, un caso de falla constante y una gran cantidad de pasos es la única solución / la más rápida / más fácil. Si se trata de un caso de puntero no inicializado u objeto liberado, FastMM4 puede ayudarlo con la configuración correcta.


Instale Debug Diag y supervise su aplicación, genere el archivo DUMP para usted y analice.


Rastrear AVs puede ser difícil porque la razón real puede no estar en el mismo punto donde realmente ocurre la excepción. Algunos consejos generales:

  1. Mira la dirección. Los archivos DLL (incluido ActiveX / OCX) se cargan en una dirección superior, por lo general más allá de 0x50000000 (los archivos DLL del sistema suelen estar en 0x70000000 a 0x78000000). Parece que su AV ocurre en una DLL. Recuerde que en la última versión del espacio de direcciones de Windows la aleatorización de carga puede cambiar las direcciones de cada ejecución
  2. Una pila de llamadas es muy valiosa para comprender cómo el código llegó al AV. Además de EurekaLog y MadExcept, las bibliotecas JCL / JVCL tienen la posibilidad de obtener esas informaciones. Es posible que deba compilar con más información de depuración (y archivos de mapas) para obtener una pila de llamadas útil.
  3. Delphi tiene una función de corrección de direcciones Goto que permite cargar una aplicación, pausarla en el depurador y luego saltar a una dirección. Pero requiere que la dirección no haya cambiado mientras tanto (recompilar con modificación probablemente cambie la dirección, y la aleatorización también lo hará).
  4. Si el error no se puede replicar en su máquina de desarrollo, puede probar el depurador remoto para depurar una aplicación que se ejecuta en otra máquina.