c# c++ windows-phone-8 access-violation

c# - Cómo interpretar este rastro de pila



c++ windows-phone-8 (2)

Este tipo de bloqueo "nunca" debería ser causado por el código administrado, por lo que podría buscar un caso en el que su aplicación invoque un API del sistema o de la biblioteca incorrectamente. Eso es tedioso Y el problema podría no tener nada que ver con tu aplicación, podría ser totalmente interno al código de otra persona. Por ejemplo, tal vez WebBrowser se cuelgue cuando el usuario navega hacia alguna página maligna. O el código que falla podría estar ejecutándose en un hilo que ni siquiera ejecuta su código. A partir de su observación de que el depurador no muestra ningún mensaje antes de la violación de acceso, y del hecho de que solo hay 2 fotogramas en la pila de llamadas, sospecho que es más probable.

Por lo tanto, debe centrarse primero en obtener un escenario de reproducción (bastante) confiable: el conjunto (mínimo) de pasos que (a menudo o habitualmente) producirán el bloqueo. Esto puede implicar entrevistar a los usuarios que experimentaron el colapso, o tal vez una automatización de prueba de su parte para tratar de acelerar la tasa de fallas.

Una vez que tenga eso, Microsoft (u otro tercero) aceptará la responsabilidad: nunca se supone que el código administrado puede causar una excepción no controlada, como la infracción de acceso. Y el escenario puede darle una pista sobre cómo puede cambiar el comportamiento de su aplicación para evitar el problema, ya que una solución real podría demorar mucho tiempo en ser lanzada y distribuida.

Recientemente lancé una aplicación para Windows Phone 8. La aplicación a veces parece fallar aleatoriamente, pero el problema es que falla sin interrupción y la única información que recibo es un mensaje en la salida que me dice que hubo una infracción de acceso sin dar ningún detalle. Entonces, después de la publicación, de los informes de fallos, pude obtener más información, pero son algo crípticos para mí.

La información es:

Problem function: unknown //not very useful Exception type: c0000005 //this is the code for Access violation exception Stack trace: Frame Image Function Offset 0 qcdx9um8960 0x00035426 1 qcdx9um8960 0x000227e2

No estoy acostumbrado a trabajar con memory pointer y similia y no estoy acostumbrado a ver un seguimiento de pila así.

Entonces tengo esa pregunta:

  1. ¿Cómo debo interpretar / leer esa información? ¿Cuál es el significado de cada información?
  2. ¿Hay alguna forma de aprovechar esa información para orientar mi búsqueda del problema?
  3. ¿Hay alguna manera de obtener esa información mientras se depura en VS2012

Notas:

  • No estoy preguntando qué es una Infracción de acceso
  • Lo etiqueté como c # y c ++ porque mi código está en c # pero la excepción se genera (estoy semi adivinando) mediante la implementación de c ++ para el componente WebBrowser

editar:

Traté de configurar el tipo de depuración en Native solamente, esto me permitió obtener la misma información que tenía en el informe de bloqueo en el centro de desarrollo. De esta forma el depurador se rompe cuando se lanza la excepción y me deja ver el código descartable, desafortunadamente no hay un archivo qcdx9um8960 .pdb (incluso en Microsoft Symbol Server), así que no sé el nombre de la función que causó el error.


Curiosamente, una búsqueda en la web del nombre de la imagen "qcdx9um8960" arroja varios resultados que hacen referencia a Windows Phone 8 y al control WebBrowser. Recopilando las respuestas y las respuestas (algunas incluso por MSFT), esto es lo que posiblemente debería considerar:

  • Si actualizaste tu aplicación desde Windows Phone 6/7 a 8, asegúrate de que aún no estés haciendo referencia a ninguna DLL 6/7. 1
  • Asegúrese de no probar o publicar su software en modo Depuración. Hay un archivo "qcdx9um8960.pdb" que puede faltar, lo que provoca la infracción de acceso. 1
  • "... existe un posible problema de condición de carrera si la aplicación tiene varias copias de WebBrowser abiertas. Vea si su código quizás inadvertidamente hace más de una instancia". 1
  • Esa imagen, "qcdx9um8960" hace referencia a una DLL del controlador Qualcomm DirectX. Tal vez no sea culpa del componente WebBrowser, sino del controlador DirectX que podría estar utilizando para representar las páginas web. 2
  • El nombre de la imagen sugiere que el bloqueo está ocurriendo en dispositivos con un Qualcomm Snapdragon S4 Plus con número de modelo MSM8960. 3
  • Suponiendo que el procesador anterior, y la referencia cruzada de teléfonos con Windows que utilizan ese chip, es probable que esté viendo el problema que ocurre en el Nokia Lumia 920T. 3 Eso no quiere decir que el controlador no funcione en varias arquitecturas de procesador o teléfonos.

Hay muchos otros aciertos relacionados con bloqueos y problemas de depuración en presencia de esa DLL, por lo que desafortunadamente para usted, creo que podría estar a merced de algún software de terceros que tenga algunos problemas sin resolver.

Referencias

1 Infracción de acceso desde que se actualizó a WP8

2 [Toolkit] [WP8] Problemas de rendimiento con DepthStencilBuffer

3 Snapdragon (sistema en chip)