2009-04-21 8 views
1

Je reçois une « référence d'objet non définie à une instance d'un objet » erreur avec le suivant en haut de la pile dans les journaux (C# application ASP.NET):Comment interpréter cette trace de pile C#? Erreur sur la ligne zéro

@Web.UI.UserBrochurePage.Page_Load(Object,EventArgs)+25 Line: 0 
@System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr,Object,Object,EventArgs)+0 Line: 0 
@System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object,EventArgs)+26 Line: 0 
@System.Web.UI.Control.OnLoad(EventArgs)+38 Line: 0 
@System.Web.UI.Control.LoadRecursive()+35 Line: 0 
@System.Web.UI.Page.ProcessRequestMain(Boolean,Boolean)+1160 Line: 0 

Les choses que je ne comprends pas:

  1. Chaque erreur est sur la ligne zéro
  2. L'erreur la plus intéressante (un haut - dans mon code) a un « +25 » après. Je n'ai jamais compris ce que cela signifiait, même si je supposais qu'ils étaient des décalages de caractères sur la ligne ... si tel était le cas, cela ne donnerait aucun sens (au milieu d'une déclaration de paramètres).

Il s'agit d'un système de production en mode édition, mais je peux toujours obtenir les numéros de ligne des objets trace de la pile. Dans ce cas, malheureusement, l'erreur ne se reproduit pas sur nos systèmes de débogage, donc je suis bloqué en faisant de mon mieux avec ça.

Tout conseil serait apprécié.

Merci, Tom

+0

Avez-vous essayé de créer une nouvelle version en mode édition et de la tester sur vos systèmes de débogage? Voyez si cette erreur est générée à nouveau! – Kirtan

Répondre

2

Voir this question pour des informations sur la compréhension des compensations. Je suppose que vous devriez vraiment construire vos binaires de production avec des informations de débogage - il va être beaucoup plus facile que d'examiner l'IL pour déterminer quel offset signifie quelle ligne.

+1

Il est ennuyeux que cette information de débogage soit toujours un fichier supplémentaire, cependant. Je suis un peu friands de distribuer des choses comme des outils de fichiers exe unique. – Nyerguds

6

Je pense que vous voyez "Ligne 0" pour chaque appel dans la pile, car votre code est compilé en mode Release au lieu du mode Debug. En mode débogage, votre code sera compilé pour inclure un fichier de symboles de débogage (.pdb). Lorsque ce fichier est disponible, votre pile d'exception représente avec précision les numéros de ligne.

Dans tous les cas, seul le numéro de ligne de votre Page_Load est significatif car les autres sont des appels internes des assemblys de structure.

Le numéro + xx après chaque entrée de pile est apparemment le "byte offset into native code". J'avoue qu'il m'a paru à l'origine que c'était le temps d'exécution en ticks ou en millisecondes.

+2

Vous pouvez également créer des PDB pour les versions de version. –

+6

+1 pour expliquer + xx. Est venu ici juste pour ce but. – Vaibhav

Questions connexes