Как узнать, что именно вызывает NullReferenceException - PullRequest
2 голосов
/ 15 августа 2011

Итак, я делаю приложение, и все работает отлично, пока не произойдет следующее:

NullReferenceException

Я проверил отладчик, но не могу точно найти причину этого исключения. У меня есть ощущение, что основная причина лежит в стороне SQL, поскольку это единственная часть, которую я недавно изменил, но мне нужно точно знать, где находится NullReferenceException, чтобы знать, какой код SQL нужно исправить.

Вот трассировка стека, если это поможет (я не ожидаю, что вы, ребята, точно знаете, что вызывает NullReferenceException, я просто не могу найти его, и я полностью потерян):

[NullReferenceException: Object reference not set to an instance of an object.]
   iTextSharp.text.pdf.PdfPRow.CopyContent(PdfPRow copy) +124
   iTextSharp.text.pdf.ColumnText.GoComposite(Boolean simulate) +8178
   iTextSharp.text.pdf.ColumnText.Go(Boolean simulate) +203
   iTextSharp.text.pdf.ColumnText.Go() +33
   iTextSharp.text.pdf.PdfDocument.AddPTable(PdfPTable ptable) +426
   iTextSharp.text.pdf.PdfDocument.Add(IElement element) +7594
   iTextSharp.text.Document.Add(IElement element) +394
   BigYOperationsConsole.Helpers.PdfHelper.ChecklistPdfStream(Checklist cl) in C:\workspace\BigYOperationsConsole\Helpers\PdfHelper.cs:129
   BigYOperationsConsole.Controllers.ChecklistsController.ExportPDF(Int32 id) in C:\workspace\BigYOperationsConsole\Controllers\ChecklistsController.cs:776
   lambda_method(Closure , ControllerBase , Object[] ) +150
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +51
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +409
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +52
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +127
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +436
   System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +61
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +305
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +830
   System.Web.Mvc.Controller.ExecuteCore() +136
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +232
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +39
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +68
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +44
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +42
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +141
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +54
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +61
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +31
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +56
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +110
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +690
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +194

Обновление: Это похоже на ошибку с colspans в iTextSharp 5.0.6. Я обновился до 5.1.1 и теперь все работает нормально. Смотрите мои комментарии ниже для более подробной информации. Странно то, что все работало с 5.0.6 ...

Ответы [ 3 ]

3 голосов
/ 15 августа 2011

Я бы сделал следующее:

Сначала настройте VS как описано ниже:

1) Перейдите в диалоговое окно «Отладка -> Исключения» и установите флажок «Исключения общего языка во время выполнения» и установите флажок в столбце «Брошенный»;

2) Перейдите в Инструменты -> Параметры -> Отладка и снимите флажок Включить только мой код (только для управляемого).

Теперь запустите проект и попробуйте воспроизвести эту проблему. Приведенная выше настройка должна заставить отладчик останавливаться на методе, в котором генерируется исключение. Если у вас нет источника этой библиотеки, используйте Reflector для анализа кода этого метода. Надеюсь, это поможет.

0 голосов
/ 15 августа 2011

Исключение NullReferenceException вызывается при попытке доступа к элементу объекта, когда сам объект имеет значение null. Переменная doc установлена ​​на экземпляр объекта или имеет значение null? Также возможно, что 1) checklistTable имеет значение null или 2) один из членов ссылочного типа checklistTable имеет значение null. Если оба значения имеют значение true и код в методе .Add () объекта doc пытается ссылаться на такого члена, вы получите это исключение.

Еще один хороший совет по отладке - перейти в Windows> Debug> Stack Trace. Когда вы нажимаете исключение, вы можете фактически следовать за стеком вызовов назад и смотреть на область действия каждого вызова, чтобы увидеть, что является нулевым.

Редактировать Хорошо, значит, checklistTable не может быть нулевым, иначе вы получите исключение раньше (я не достаточно хорошо посмотрел ваш код). Однако один из его членов может быть нулевым, и, если на один из членов этого члена ссылаются в методе .Add (), вы получите это исключение.

0 голосов
/ 15 августа 2011

Переменная doc равна нулю, когда вы пытаетесь вызвать метод .add.Нужно увидеть остальные из них метод или больше кода, чтобы выяснить, почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...