Как мне интерпретировать эту трассировку стека C #? Ошибка на нулевой линии - PullRequest
1 голос
/ 21 апреля 2009

Я получаю сообщение об ошибке «Ссылка на объект не установлена ​​на экземпляр объекта» со следующей информацией в верхней части стека в журналах (приложение C # ASP.NET):

@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 

Вещи, которые я не понимаю:

  1. Каждая ошибка в нулевой строке
  2. Самая интересная ошибка (верхняя - в моем коде) имеет после +25. Я никогда не понимал, что они означают, хотя я предполагал, что это смещения символов в строке ... если бы это было так, это не указывало бы на что-либо значимое (середина объявления параметра).

Это производственная система в режиме выпуска, но я все еще могу получать номера строк из объектов трассировки стека. В этом случае, к сожалению, ошибка не воспроизводится на наших системах отладки, поэтому я застрял, стараясь изо всех сил с этим.

Любой совет будет оценен.

Спасибо, Том

Ответы [ 2 ]

6 голосов
/ 21 апреля 2009

Я думаю, что вы видите «Строку 0» для каждого вызова в трассировке стека, потому что ваш код компилируется в режиме Release вместо режима Debug. В режиме отладки ваш код будет скомпилирован для включения файла символов отладки (.pdb). Когда этот файл доступен, ваша трассировка стека исключений будет точно представлять номера строк.

В любом случае важен только номер строки вашего Page_Load, потому что остальные являются внутренними вызовами сборок каркаса.

Число + xx после каждой записи трассировки стека, по-видимому, является " байтовым смещением в собственный код ". Признаюсь, мне изначально казалось, что это было время исполнения в тиках или миллисекундах.

2 голосов
/ 21 апреля 2009

См. этот вопрос для получения информации о понимании смещений. Я подозреваю, что вам действительно нужно просто создать свои производственные двоичные файлы с отладочной информацией - это будет намного проще, чем проверка IL, чтобы определить, что означает смещение для какой строки.

...