Apache HTTP Server dejó de funcionar
XAMPP + Eclipse + XDebug: Apache HTTP Server dejó de funcionar
Curiosa e inesperadamente al intentar depurar un código php usando: Eclipse, XAMPP y XDebug ocurre un error interno y el servidor Apache deja de funcionar. Usando Windows XP dicho error no se produce pero en Windows Vista y en Windows 7 sí. El mismo aparece justo en el momento de pulsar el botón de inicio de la depuración. Buscando información por la red no encontré ninguna solución y estuve casi a punto de tirar la toalla, se me ocurrió una idea que tal vez puede ser una buena solución temporal.
Nota de editor: Parece ser que este error ha sido corregido, ya que, en estos momentos he testeado XAMPP 1.7.7 y funciona correctamente.
Las versiones y características que uso en este momento son las siguientes:
- Eclipse: INDIGO, versión 3.7.0
- XAMPP. Versión 1.7.4
- XDebug. Versión 2.1.2
- Windows 7 Profesional
Como acabo de decir y según lo que hemos realizado en estos tutoriales anteriores, al intentar depurar un simple código php recibo el siguiente error:
Voy a poner aquí el reporte exacto del error:
Nombre del evento de problema: APPCRASH
Nombre de la aplicación: httpd.exe
Versión de la aplicación: 2.2.17.0
Marca de tiempo de la aplicación: 4cbbe9e8
Nombre del módulo con errores: php_xdebug.dll
Versión del módulo con errores: 2.1.2.1
Marca de tiempo del módulo con errores: 4e317b06
Código de excepción: c0000005
Desplazamiento de excepción: 0000bee9
Versión del sistema operativo: 6.1.7601.2.1.0.256.48
Id. de configuración regional: 3082
Información adicional 1: 0a9e
Información adicional 2: 0a9e372d3b4ad19135b953a78882e789
Información adicional 3: 0a9e
Información adicional 4: 0a9e372d3b4ad19135b953a78882e789
"Marca del tiempo de la aplicación" es el timedatestamp tanto de la aplicación como del error. Desplazamiento de excepción es el offset.
Analizando el error
Si te fijas en la imagen anterior, podrás observar que el error se ha producido ejecutando la aplicación httpd.exe (Servidor Apache en XAMPP). Realmente el error (tal vez debería decir excepción no capturada por el manejador) se origina en la librería php_xdebug.dll que es la librería que descargamos desde su página web oficial, y corresponde al debugger XDebug. Es decir, el error es por culpa de la dll del depurador.
Puedo asegurar que busqué y rebusqué por la red este error en varios idiomas. No encontré solución y vi que no sólo se producía en Windows 7, sino también en Windows Vista. Como ejemplo, te invito a que visites la siguiente página y verás la cantidad de personas que tenían (posiblemente tienen) este problema en Windows Vista. El hilo fue cerrado finalmente: http://bugs.xdebug.org/view.php?id=410. Al final el administrador pone una librería en descarga que parece que soluciona el problema pero a mi me sigue saliendo lo mismo.
Seguí buscando y buscando, probando y probando configuraciones y nada de nada. Estuve a punto de "tirar la toalla" y cambiar el depurador XDebug por Zend Debugger pero se me ocurrió una cosa.
En mi experiencia con Ingeniería Inversa he visto muchas veces el error (la excepción) 0xc0000005. Ésta se produce muchas veces (observa que no digo siempre) cuando realizo un dumpeado y la IAT no está correcta. Entonces el programa al cargarse en memoria no encuentra la librería o la API que está definida en la IID y salta este error. Te lo voy a demostrar. Cojo un programa cualquiera, con un editor del PE header entro a ver las librerías importadas y modifico un parámetro para que salte un error. Ejecuto este programa y mira que ventana de advertencia me aparece:
Como en el log del error pone el offset, cargué la librería en un desensamblador y parece ser que el error proviene de aquí (color verde):
1000BEE0 mov dword ptr ss:[esp+38],esi
1000BEE4 jle short 1000BF49
1000BEE6 mov ebp,dword ptr ds:[ebx+34]
1000BEE9 cmp dword ptr ss:[ebp+8],edx
1000BEEC jnz short 1000BF36
1000BEEE mov eax,dword ptr ss:[esp+10]
Realmente es muy extraño que en ese código se produzca una excepción 0xc0000005, no tengo claro que ahí esté el error ¡hmm!. La librería XDebug veo que está compilada con Visual C++ 6 o 7. Examino las librerías y API importadas y no veo nada fuera de lo normal. No me quiero entretener más con este error, hoy no estoy motivado para depurar ese código ya que lo he analizado muy por encima y requiere bastante tiempo. Además no puedo depurarlo desde Windows XP porque funciona correcto y desde Windows 7 el debugger ha crasheado varias veces...tal vez en un futuro lo haga.
En estos momento volví a mi antiguo Windows XP y ejecuté de nuevo toda la instalación de Eclipse + plugins + XAMPP + XDebug y sorprendentemente ¡funciona correcto!. ¿Cómo y por qué puede ocurrir esto? Podría ser alguna función de la librería XDebug, yo pienso que tal vez alguna relocación (reubicación-relocation) ya que en Windows 7 es diferente la dirección virtual de la carga de la librería y no es la que marca la Image Base, pero ahora mismo no lo sé.
Solución temporal
Quedaban 5 segundos para que eliminara XDebug, 4 segundos, 3, 2, 1 y en el último se me ocurrió que como funciona correctamente en Windows XP, ¿por qué no ejecuto XAMPP o Apache con compatibilidad con Windows XP? Fui a la instalación de XAMPP -> Apache -> bin, pulsé con el botón derecho del ratón sobre el archivo httpd.exe y seleccioné compatibilidad con Windows XP. Ejecuté xampp-control.exe y después depuré desde Eclipse et voilà!. Se ejecutó correctamente.
Cuando escribí este tutorial yo estaba utilizando las herramientas que he indicado al inicio pero a fecha de la publicación salieron nuevas versiones tanto de Eclipse como XDebug que todavía no he testeado y no puedo saber si han corregido este molesto error. Cuando tenga noticias o hagas tus pruebas lo comentaré.
Un saludo.
Este error tambien me estaba saliendo, hice lo de la compatibilidad de la version y siguio igual, no funciono, como ultima opcion ingrese al archivo php.ini ubicado en "\xampp\php\" o ingresando directamente por el panel de control de xampp; y modifique la parte que dice register_global s=On lo pase a register_global s=Off, guardar y nunca mas me volvio a aparecer el error.
Espero les sea de utilidad. Saludos.
A mí me ha funcionado sin problemas hoy, 28/11/2013, siguiendo las instrucciones salvo la instalación de Eclipse que me la han instalado mis compis de desarrollo (ellos lo usan para Java). Mi configuración:
Eclipse: INDIGO Service Release 2 (Build 20120216-1857)
XAMPP. Versión 1.2.2
XDebug. Versión 2.2.3
Windows 7 Profesional (64 bits)
Un saludo.
Si antes funcionaba, recuerdas cual es ultimo modulo que instalaste, a ver si está hay el problema
Un saludo
Un saludo y gracias por comentar.