2017-02-07 6 views
1

Я знаю эту ошибку и уже заданы десятки вопросов. Но мой вопрос заключается не в «почему», а в том, как «отлаживать».Как отлаживать «Индекс был за пределами массива» в DNN

Я установил DNN CMS и разработал для этого модуль. Иногда это порождает эту ошибку:

at System.Collections.Generic.List`1.Enumerator.MoveNext() 
at System.Linq.Enumerable.<ConcatIterator>d__58`1.MoveNext() 
at System.Linq.Buffer`1..ctor(IEnumerable`1 source) 
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) 
at System.Web.Http.Services.DefaultServices.GetServices(Type serviceType) 
at System.Web.Http.ServicesExtensions.GetServices[TService](ServicesContainer services) 
at System.Web.Http.ModelBinding.ModelBinderAttribute.GetModelBinderProvider(HttpConfiguration configuration) 
at System.Web.Http.ModelBinding.ModelBinderAttribute.GetModelBinder(HttpConfiguration configuration, Type modelType) 
at System.Web.Http.ModelBinding.ModelBinderAttribute.GetBinding(HttpParameterDescriptor parameter) 
at System.Web.Http.ModelBinding.DefaultActionValueBinder.GetParameterBinding(HttpParameterDescriptor parameter) 
at System.Array.ConvertAll[TInput,TOutput](TInput[] array, Converter`2 converter) 
at System.Web.Http.ModelBinding.DefaultActionValueBinder.GetBinding(HttpActionDescriptor actionDescriptor) 
at System.Web.Http.Tracing.Tracers.ActionValueBinderTracer.System.Web.Http.Controllers.IActionValueBinder.GetBinding(HttpActionDescriptor actionDescriptor) 
at System.Web.Http.Controllers.HttpActionDescriptor.get_ActionBinding() 
at System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem..ctor(HttpControllerDescriptor controllerDescriptor) 
at System.Web.Http.Controllers.ApiControllerActionSelector.GetInternalSelector(HttpControllerDescriptor controllerDescriptor) 
at System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext) 
at System.Web.Http.Tracing.Tracers.HttpActionSelectorTracer.<>c__DisplayClass2.<System.Web.Http.Controllers.IHttpActionSelector.SelectAction>b__0() 
at System.Web.Http.Tracing.ITraceWriterExtensions.TraceBeginEnd(ITraceWriter traceWriter, HttpRequestMessage request, String category, TraceLevel level, String operatorName, String operationName, Action`1 beginTrace, Action execute, Action`1 endTrace, Action`1 errorTrace) 
at System.Web.Http.Tracing.Tracers.HttpActionSelectorTracer.System.Web.Http.Controllers.IHttpActionSelector.SelectAction(HttpControllerContext controllerContext) 
at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken) 
at System.Web.Http.Tracing.Tracers.HttpControllerTracer.<ExecuteAsyncCore>d__5.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at System.Web.Http.Tracing.ITraceWriterExtensions.<TraceBeginEndAsyncCore>d__18`1.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext() 

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

Как отладить эту ошибку? Как найти корень проблемы?

Для тех, кто считает это модулем! Это простой Web-Api, как вы видите на этой картинке:

Simple Web-Api

+0

делить код и указывать линию, которая дает вам исключение –

+0

Уважаемый @ не повезло, если бы я знал, какая часть моего кода вызывает эту проблему, я бы не стал задавать этот вопрос, конечно. : D Проблема в том, что я не могу поделиться всем своим проектом здесь. Я не собираюсь делиться чем. –

+0

Я тоже работаю с DNN, и я знаю, что слишком сложно отслеживать проблему, особенно если вы новичок в DNN, сначала убедитесь, что вы устанавливаете 'debug =" false "' inside' web.config', если этот код часть 'dll', добавьте' .pdb' файлы, а затем проверьте таблицу «EventLogs». сообщите, если вы сделали эту часть или нет. –

ответ

1

Вы, вероятно, есть массив, который периодически не получает значения. Показывать нам код действительно поможет.

Точки останова должны вам помочь. Затем проверьте окно Locals и Autos, чтобы узнать, почему он не получает никакой ценности.

+0

Я упомянул, что знаю «почему» я получив эту ошибку. Речь идет не о том, «не зная и не пытаясь выяснить». Речь идет о том, как его решить. –

1

Я использую блок try-catch в модуле Page_Load, который улавливает ProcessModuleLoadException в случае его возникновения.

protected void Page_Load(object sender, EventArgs e) 
{ 
    try 
    { 
     buildModule(); 
    } 
    catch (Exception ex) 
    { 
     Exceptions.ProcessModuleLoadException(this, ex); 
    } 
} 

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

+0

Я не знаю, какой модуль вызывает эту ошибку. Где я должен поместить этот «try-catch»? –

+0

В идеале это будет в 'Page_Load' каждого модуля. – VDWWD

+0

, пожалуйста, проверьте прикрепленное изображение, «Ссылка на объект ...» и «индекс был снаружи ...», случаются много времени. нет модуля веб-формы, это проект web-api. –