Apache HTTP Server dejó de funcionar

Creado: Domingo, 30 Octubre 2011 Escrito por karmany Visto: 28941
Tamaño de letra:

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:

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:

Error en Apache - XAMPP

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:

Error aplicación

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.

Servidor Apache en XAMPP - WXP

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é.

Última actualización: Domingo, 15 Abril 2012