c# - ver - visual studio 2017 no muestra los errores
Próximos pasos de depuración de errores en el entorno del cliente (3)
Parte de nuestro producto es un complemento de IE (BHO), que se ejecuta felizmente en muchos entornos diferentes en múltiples versiones de SO / versiones de IE.
Sin embargo, en una configuración de prueba para un cliente, al ejecutar máquinas XP SP3 a través de citrix XenDesktop, IE 7 falla cuando se cumplen las dos condiciones siguientes:
- Nuestro plugin está cargado
- Se carga el add-on Shockwave flash object (última versión - Flash11e.ocx)
Alguna información extra:
- El bloqueo ocurre cuando tratamos de mostrarle un diálogo al usuario o poco después. Sin embargo, el bloqueo no ocurre en nuestro código, que está escrito en C #, sucede en varios lugares, a menudo ole32.dll.
- Nuestros diálogos son páginas HTML representadas en un control de navegador web, que se muestran en un Formulario a través de form.ShowDialog (ownerWindow) en el BHO.
Cualquiera de los complementos parece funcionar bien independientemente. Al deshabilitar el flash o al omitir los sitios que usan flash, se evita el bloqueo.
El cliente es razonablemente servicial y pude ejecutar IE con MS Debugging Tools para capturar algunos volcados en el momento del bloqueo. Ahora estoy teniendo problemas para interpretar los vertederos. Pensando que era corrupción de montón, ejecuté las herramientas de depuración con el pageheap habilitado completo, pero eso no desencadenó un punto de interrupción.
El análisis de las herramientas de depuración es el siguiente:
En iexplore_ PID _5064_ Fecha _12_20_2011__Tiempo_11_19_26AM_ 161 _Second_Chance_Exception_C0000005.dmp las instrucciones de ensamblaje en ole32! HandleIncomingCall + e2 en C: / WINDOWS / system32 / ole32.dll de Microsoft Corporation ha causado una excepción de infracción de acceso (0xC0000005) al intentar leer desde la ubicación de memoria 0x03ce4ff8 en el hilo
El seguimiento de la pila en el punto de caída es:
Thread 7 - System ID 1140
Entry point ieframe!CTabWindow::_TabWindowThreadProc
Create time 20/12/2011 19:18:08
Time spent in user mode 0 Days 0:0:19.828
Time spent in kernel mode 0 Days 0:0:10.468
Full Call Stack
Function Arg 1 Arg 2 Arg 3 Arg 4 Source
ole32!HandleIncomingCall+e2 0f9aafbc 00000034 00000001 07e8ab6c
ole32!STAInvoke+24 17444f80 00000001 0781efc0 077e8f10
ole32!AppInvoke+7e 17444f28 077e8f10 0781efc0 07e8ab6c
ole32!ComInvokeWithLockAndIPID+2c2 17444f28 077ec420 00000000 17444f28
ole32!ComInvoke+60 17444f28 00000400 0774ee30 07bcfe48
ole32!ThreadDispatch+23 17444f28 07bcfeb0 7752b096 00000000
ole32!ThreadWndProc+fe 005d0594 078b6ee0 0000babe 17444f2c
user32!InternalCallWinProc+28 7752b096 005d0594 00000400 0000babe
user32!UserCallWinProcCheckWow+150 00000000 7752b096 005d0594 00000400
user32!DispatchMessageWorker+306 7bcff64 00000000 07bcffb4 3e25e69b
user32!DispatchMessageW+f 07bcff64 0013e490 0013e5b8 07868ff0
ieframe!CTabWindow::_TabWindowThreadProc+189 07e03e30 0013e490 0013e5b8 07868ff0
kernel32!BaseThreadStart+37 3e25e464 07868ff0 00000000 00000000
Voy a ver qué más puedo obtener de este archivo de volcado, pero espero que alguien aquí tenga una gran idea. Me gustaría probar muchas más cosas en el sitio del cliente, pero solo tenemos muchas posibilidades con ellas, así que tengo que usarlas cada vez que llegue allí con mucha sabiduría.
Para mí, un par de próximos pasos parecen ser:
- Si el problema es desordenar algo en el camino de mostrar diálogos, me gustaría probar un BHO completamente despojado que solo muestra diálogos, para mostrar que el problema no está en nuestro código.
- Hay muchos otros complementos instalados en la máquina, sería bueno comenzar con una imagen simplificada y construir desde allí, para ver cuándo comienza el problema.
A veces, el bloqueo ocurre en pseuoserverinproc.dll, que es parte de HDX MediaStream, que ejecuta contenido flash localmente en lugar de en el servidor.
== actualización
He tenido bastante éxito con WinDbg analizando los vertederos que tengo. Creo que tiene bastante sentido intentar usar gflags / windbg en el escritorio que está teniendo problemas y depurarlo en vivo.
Ese sería mi próximo paso recomendado para cualquier persona en una posición similar en este momento, sabrá más sobre cuán bueno es este consejo en un período de semanas cuando he tenido la oportunidad de aplicarlo.
Hay una versión de depurador del reproductor flash que puede generar información de diagnóstico que podría ayudarlo. Me doy cuenta de que el problema no es necesariamente flash, pero podría ofrecer una idea de posibles problemas.
Debo admitir que no lo he instalado por un tiempo, pero creo que estos enlaces pueden ayudarlo:
Insuficiencias sobre cómo configurar la versión del depurador en los registros de salida:
http://kb2.adobe.com/cps/403/kb403009.html
El enlace de descarga de la versión del depurador:
Una cosa que podría hacer fuera del sitio del cliente es ejecutar su código a través de un analizador estático, por ejemplo pclint para ver si hay errores obvios en su propio código que se activan en situaciones especiales.
Al final resolvimos el problema (lo solucionamos bien). Si alguien está interesado, así es como lo hicimos.
Analizando los volcados de pila con WinDbg (que es una gran herramienta). Encontramos que después de que el problema se aisló para mostrar WinForms en iexplore.exe después de que flash se había cargado en las implementaciones de XenDesktop. Sabiendo esto, pudimos evitar el problema.
¡La clave estaba en obtener buenos volcados de emergencia, resolviendo un escenario de reproducción mínima y teniendo un buen cliente que nos permitiera probar nuestra teoría!