50 votes

Comment interpréter cette trace de pile

J'ai récemment publié une application Windows phone 8. L'application semblent parfois se bloquer au hasard, mais le problème est qu'il crash sans les casser et les seules infos que j'obtiens est un message sur la sortie qui me dit que il y avait une violation d'Accès sans donner de détails. Donc, après la libération, de la crise des rapports, j'ai pu obtenir quelques informations, mais ils sont un peu cryptical pour moi.

Les infos sont:

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

Je n'ai pas l'habitude de travailler avec le pointeur de la mémoire et similia, et je n'ai pas l'habitude de voir une trace de la pile comme ça.

J'ai donc ces question:

  1. Comment dois-je interpréter/lire ces informations, quel est le sens de chaque pièce de l'information?
  2. Est-il un moyen de tirer parti de ces informations pour cibler mes recherches pour trouver le problème?
  3. Est-il un moyen d'obtenir ces informations pendant le débogage dans VS2012

Notes:

  • Je ne suis pas demander à ce qu'une Violation d'Accès est
  • J'ai marqué ce que c# et c++ parce que mon code est en c#, mais l'exception est générée (je suis semi-devinettes) en c++ mise en œuvre pour le composant WebBrowser

edit:

J'ai essayé le réglage du type de Débogage Natif seulement, ce qui m'a permis d'obtenir les mêmes infos que j'ai eu dans le rapport de crash sur le dev center. De cette façon, le débogueur pause lorsque l'exception est levée, et laissez-moi voir les disassebled code, malheureusement il n'y a pas de qcdx9um8960 .fichier pdb (même sur le Serveur de symboles Microsoft), donc je ne sais pas le nom de la fonction qui a provoqué l'erreur.

17voto

Cory Points 37551

Curieusement, une recherche sur le web pour le nom de l'image "qcdx9um8960" renvoie plusieurs résultats de référencement de Windows Phone 8 et le contrôle WebBrowser. Recueillir les réponses et les répliques (certains même par MSFT), voici ce que vous devriez probablement regarder dans:

  • Si vous avez mis à jour votre application à partir de Windows Phone 6/7-8, assurez-vous que vous n'êtes pas encore référence à 6/7 Dll. 1
  • Assurez-vous de ne pas les tests ou la publication de votre logiciel en mode de Débogage. Il y a un "qcdx9um8960.apb" fichier qui peut être manquant, entraînant la violation d'accès. 1
  • "...il est possible de l'état de concurrence problème connu si l'application a plusieurs copies de WebBrowser ouvrir. Voir si votre code peut-être par inadvertance, fait plus d'une instance." 1
  • Cette image, "qcdx9um8960" fait référence à un Qualcomm pilote DirectX DLL. C'est peut-être pas le composant WebBrowser de la faute, mais le pilote DirectX il peut être utiliser pour le rendu des pages web. 2
  • Le nom de l'image suggère que l'incident se passe sur l'appareil alimenté par un processeur Qualcomm Snapdragon S4 Plus avec le numéro de modèle MSM8960. 3
  • En supposant que le processeur au-dessus, et de la croix-référencement des téléphones Windows qui utilisent cette puce, vous êtes probablement à la recherche à la question qui se produisent sur le Nokia Lumia 920T. 3 ce n'est pas à dire que le pilote ne fonctionne pas sur plusieurs architectures de processeur ou de téléphones.

Il y a plusieurs autres succès concernant les accidents et les problèmes de débogage dans la présence de la DLL, donc, malheureusement pour vous, je pense que vous pourriez être à la merci de certains logiciels tiers qui a quelques questions en suspens.


Références

1Violation d'Accès depuis la mise à jour de WP8

2[Toolkit][WP8] les problèmes de Performances avec DepthStencilBuffer

3Snapdragon (système sur puce)

8voto

BobHy Points 525

Ce genre d'accident "doit jamais être causés par le code géré de sorte que vous pouvez aller à la recherche pour un cas où votre application appelle un système de bibliothèque ou de l'API de manière incorrecte. C'est fastidieux. Et le problème peut n'avoir rien à faire avec votre application, il peut être tout à fait interne à quelqu'un d'autre code. E. g, peut-être WebBrowser se bloque lorsque l'utilisateur accède à une mauvaise page. Ou le défaut de code pourrait être en cours d'exécution sur un thread qui n'a même jamais exécute votre code. À partir de votre observation que le débogueur n'affiche pas de message d'avant la violation d'accès, et le fait qu'il y a seulement 2 images sur la pile d'appel, je pense que c'est le plus probable.

Donc, vous devriez vous concentrer d'abord sur l'obtention d'une (assez) fiable repro scénario: l' (minime) de l'ensemble des étapes (souvent ou habituellement) produisent de l'accident. Cela peut comprendre une entrevue avec les utilisateurs qui ont vécu l'accident, ou peut-être que certains d'automatisation de test de votre part pour essayer d'accélérer le taux d'échec.

Une fois que vous avez cela, Microsoft (ou un autre 3ème partie) d'accepter la responsabilité -- code managé est jamais censé être capable de provoquer une exception non gérée comme violation d'accès. Et le scénario pourrait vous donner un indice sur la façon dont vous pouvez modifier votre comportement de l'application pour éviter le problème, parce qu'une vraie solution peut prendre du temps à être publié et distribué.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X