locked
Log del IEHost en Internet Explorer 9 RRS feed

  • Pregunta

  • Hola,

    publico esto aquí también aunque ya lo he publicado en el foro de C# porque en realidad también tiene mucho que ver con Internet Explorer 9, y no sabía por cuál de los dos decidirme... ;)

    Gracias.

    ----------------------------------------------------------------------------------------------------------------------------------------------

    Hola,

    he desarrollado un control .NET (Framework 4, Visual Studio 10) programado en C# que es alojado en Internet Explorer 9 y accesible a través de interfaz COM como si de un ActiveX se tratase. Hasta ahí ningún problema insalvable.

    El problema viene a la hora de depurar, cuando tengo algún error. Tradicionalmente lo he venido haciendo por medio de trazas que escribo en un fichero, y aunque es más incómodo, no me ha ido del todo mal. Sin embargo, cuando quieres "hilar un poco más fino" o cuando tienes un error que te tira el navegador, la cosa se complica.

    Ahora mismo estoy teniendo un error que hace que se caiga Internet Explorer y estoy un poco bloqueado.

    Investigando en la red, encontré que existe una forma de hacer que el CLR interno de Internet Explorer (IEHost) arroje trazas a un fichero, sin más que escribir un par de valores nuevos (DebugIEHost, IEHostLogFile) en el sitio adecuado del registry. Pensé que quizá esto me daría información sobre mi error. Lamentablemente, parece ser que esta opción estaba hasta .NET Framework 1.1 y para Internet Explorer 5 o incluso 6, pero no he encontrado referencias ni documentación para versiones posteriores. De hecho, hay muy poquita información útil (o al menos, yo no la he encontrado todavía) sobre el IEHost. Ya lo he probado y no funciona, no consigo obtener las trazas. 

    ¿Alguien tiene más información sobre cómo obtener trazas del IEHost? O en su defecto, ¿alguien sabe cómo puedo depurar el control .NET dentro del propio Internet Explorer 9? La verdad es que no acabo de encontrar la forma idónea para hacer esto y todo lo que he intentado hasta el momento no me ha dado resultado.

    Os agradezco de antemano vuestra ayuda.

    Un saludo,

    Domingo.

    jueves, 10 de mayo de 2012 9:35

Respuestas

  • Para depurar un BHO en Internet Explorer, lo que yo hago es iniciar IE y cargar una página.  Una vez cargada, utilizo Visual Studio para pegarme al proceso iexplore.exe.  Pero el detalle aquí es que no es el iexplore.exe original, sino que un segundo.  Usualmente el iexplore.exe que consume menos memoria NO es el correcto.  Otra pista:  El que tiene título NO es.

    La opción en Visual Studio en inglés se llama "Attach to process" y está en el menú Debug (lo siento, no uso Visual Studio en español porque mi compañía lo usa todo en inglés).

    En fin, esa técnica la uso con mi BHO, aunque supongo que sirve con ActiveX.  Puede pegarse al proceso antes de cargar la página con el ActiveX.

    Si busca más detalladamente, también encontrará que puede deshabilitar tab browsing y forzar a usar un único iexplore.exe mediante una clave de registro y por lo tanto puede depurar el ActiveX fácilmente especificando "iexplore.exe" en las propiedades de depuración del proyecto ActiveX.


    Jose R. MCP

    • Marcado como respuesta visualtools viernes, 11 de mayo de 2012 10:48
    jueves, 10 de mayo de 2012 13:43

Todas las respuestas

  • Para depurar un BHO en Internet Explorer, lo que yo hago es iniciar IE y cargar una página.  Una vez cargada, utilizo Visual Studio para pegarme al proceso iexplore.exe.  Pero el detalle aquí es que no es el iexplore.exe original, sino que un segundo.  Usualmente el iexplore.exe que consume menos memoria NO es el correcto.  Otra pista:  El que tiene título NO es.

    La opción en Visual Studio en inglés se llama "Attach to process" y está en el menú Debug (lo siento, no uso Visual Studio en español porque mi compañía lo usa todo en inglés).

    En fin, esa técnica la uso con mi BHO, aunque supongo que sirve con ActiveX.  Puede pegarse al proceso antes de cargar la página con el ActiveX.

    Si busca más detalladamente, también encontrará que puede deshabilitar tab browsing y forzar a usar un único iexplore.exe mediante una clave de registro y por lo tanto puede depurar el ActiveX fácilmente especificando "iexplore.exe" en las propiedades de depuración del proyecto ActiveX.


    Jose R. MCP

    • Marcado como respuesta visualtools viernes, 11 de mayo de 2012 10:48
    jueves, 10 de mayo de 2012 13:43
  • Muchas gracias, me diste la clave que me faltaba!

    Efectivamente, las pruebas que había hecho con "Attach to process" (tranquilo, yo también tengo todas las aplicaciones de desarrollo en inglés) habían sido eligiendo el proceso iexplorer que tenía la URL, supuse que era lo lógico y no probé con el otro.

    El caso es que ya he conseguido pararme en un breakpoint estando mi ActiveX .NET ejecutándose en Internet Explorer... :)

    Por cierto, respecto a lo otro que consultaba sobre el IEHost, ya he averiguado alguna cosa más por otro lado. Efectivamente, en la versión 4 de .NET Framework, Microsoft ya ha dejado de soportar el IEHost o runtime de .NET para Internet Explorer. Lo que ocurre en esta versión es que cuando instancias un objeto .NET (como es el caso de mi ActiveX) en Internet Explorer, el navegador utiliza el CLR del sistema para ejecutarlo. Es responsabilidad del programador que la versión de dicho CLR sea la misma que la que ha utilizado para desarrollar su objeto .NET. En mi caso, yo me aseguro de ello comprobándolo en la instalación (es un tick-box del proyecto MSI).

    De todas formas, Microsoft parece que desaconseja utilizar un objeto .NET dentro de IE de esta forma. Supongo que para dar más cancha a cosas como Silverlight y XBAP.

    En fin, gracias de nuevo y un saludo.

    Domingo.

    viernes, 11 de mayo de 2012 10:48