9
votes

Comment déboguer des erreurs d'analyse XAML en Silverlight?

Je rencontre le problème suivant semi-régulièrement: je modifie XAML ou certaines ressources utilisées par elle et lorsque je vais charger le projet Silverlight en mode de débogage, il ne devient que aussi loin que l'animation de chargement Silverlight.

J'ai essayé de joindre le débogueur VS08 au processus, mais cela ne fait rien à ce point (fonctionne bien une fois que je suis dans le Silverlight mais pas auparavant.)

De l'expérience précédente, j'ai remarqué que cela se produit lorsqu'il s'agit de problèmes avec la XAML ou les ressources de celui-ci, mais ma seule solution jusqu'à présent a été de disséquer le code ligne-ligne jusqu'à ce que je résume le problème.

Y a-t-il un moyen facile de déboguer / diagnostiquer ces situations?

Mise à jour

J'ai trouvé Cette question avec une aide, mais elle ne fournit toujours pas un bon moyen de déboguer ces types de problèmes.


0 commentaires

4 Réponses :


1
votes

Ceci peut ne pas s'appliquer, mais une source fréquente d'erreurs XAML est due à des exceptions non capturées dans les convertisseurs que vous utilisez comme des ressources. Les gens oublient souvent d'utiliser un bloc d'essai dans leurs convertisseurs et lorsque quelque chose souffle là-bas, vous finissez par avoir à disséquer votre ligne de code par ligne.

Et, prenez cela avec un grain de sel, mais en fonction de la situation, vous pourrez peut-être copier-coller une partie de votre XAML dans un projet WPF et obtenir de meilleurs messages d'erreur. Je ne me suis jamais convenu de cette tactique moi-même, mais je l'ai récemment entendu parler d'un développeur expérimenté WPF / SL qui est bien plus intelligent que moi, donc cela vaut peut-être un coup de feu. : -)


0 commentaires

5
votes

Cela a été une vraie douleur à déboguer, mais j'ai finalement trouvé le problème caché au fond du constructeur à l'un de nos contrôles personnalisés (qui recherchait une ressource qui n'était pas là.) Le vrai problème ne réalise pas la problème, mais le trouver.

J'ai constaté que c'est-à-dire que c'est-à-dire de répondre à des exceptions passées de Silverlight à la DOM, mais vous n'obtenez pas le même type de retour dans le navigateur chrome (que j'utilise.) Une solution qui aide réellement un grand Deal (même Moreso que le Conseil IE) est de modifier la méthode ReporterRortOtom () dans App.xaml.cs aux suivantes: P>

private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e)
{
    string errorMsg = String.Empty;
    try
    {
        errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;
        errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n");

        System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");");
    }
    catch (Exception)
    {
#if DEBUG
        MessageBox.Show(errorMsg);
#endif
    }
}


0 commentaires

0
votes

par Microsoft: l'utilisateur final à ce moment ne peut pas déboguer l'analyseur XAML, seuls MS peuvent faire cela. La nouvelle version de Silverlight 4 XAML Parser a été complètement réécrite à l'aide de code géré et qu'elle nous donnera une meilleure façon de le déboguer. Je sais cela comme je venais d'avoir un problème et j'ai ouvert une affaire de soutien et m'a informé par un dev.

Le clkosest Je pourrais jamais venir voir ce qui se passait avec l'analyseur utilisait Silverlight Spy:

http://firstflosoftooroftware.com/silverlightspy/download-Silverlight-Spy/

Super outil.


0 commentaires

3
votes

Ce n'est pas la réponse ultime, mais peut souvent aider

dans Visual Studio:

  • Cliquez sur débogage> Exceptions
  • Cliquez sur "Rechercher" et recherchez xaml
  • Cliquez sur le bouton "jeté" à côté de system.windows.markup.xamlParseXception

    Démarrez votre projet en mode de débogage. Toute exception XAML sera présentée immédiatement. Vérifiez parfois l'exception interne pour plus d'informations.

    J'ai perdu beaucoup de temps avant que j'ai finalement compris celui-ci!


0 commentaires