Когда на веб-странице Asp.Net возникает исключение, отображается сообщение об ошибке с полной трассировкой стека.
Пример ниже:
Трассировка стека:
IndexOutOfRangeException: индекс находился за пределами массива.
MyNameSpace.SPAPP.ViewDetailsCodeBehind.LoadView () +5112 MyNameSpace.SPAPP.ViewDetailsCodeBehind.Page_Load (отправитель объекта, EventArgs e) +67
System.Web. Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Object o, Object t, EventArgs e) +13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback (отправитель объекта, EventArgs e) +43
System.Web. UI.Control.OnLoad (EventArgs e) +98
... ...
Проблема в том, что отображаемый номер строки не соответствует строке в моем коде, вызвавшей исключение.
В приведенном выше примере стек показывает номер строки 5111, но в моем коде за файлом .cs всего 250 строк!
Страница aspx хранится на сайте SharePoint, а сборка с исходным кодом развернута в GAC. Кроме того, я скомпилировал в режиме отладки.
С учетом приведенных выше настроек, как я могу узнать, какая строка в моем коде вызвала исключение?
Разъяснение, указанное strelokstrelok:
В режиме выпуска число перед исключением НЕ является строкой кода. Вместо этого это смещение к собственному скомпилированному коду, который не имеет никакого значения для людей. Подробнее об этом здесь: http://odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx
В режиме отладки файл PDB автоматически сопоставляет смещение собственного кода с вашей строкой .cs в коде, и отображаемое число БУДЕТ соответствующей строкой в коде.