2017-02-07 4 views
1

Ich kenne diesen Fehler und Dutzende von Fragen wurden bereits gestellt. Aber meine Frage ist nicht "warum", es geht um "wie man debuggt".Wie zu debuggen "Index war außerhalb der Grenzen des Arrays" in DNN

Ich habe ein DNN CMS installiert und ein Modul dafür entwickelt. Manchmal wirft es diesen Fehler:

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() 

Wie man dort sehen kann überall keine Stellfläche von meinem Code ist. Es ist alles Systemcode und ich weiß nicht, wie ich das Problem beheben und beheben kann. Ich starte gerade meinen Anwendungspool neu und alles funktioniert gut, und nach einer Weile erscheint wieder dieser Fehler.

Wie soll ich diesen Fehler debuggen? Wie finde ich die Wurzel des Problems?

Für alle, die das für ein Modul halten! Dies ist ein einfacher Web-Api, wie Sie in diesem Bild sehen:

Simple Web-Api

+0

teilen Sie den Code und zeigen Sie die Zeile, die Ihnen die Ausnahme gibt –

+0

Sehr geehrte @ un-glücklich, wenn ich wüsste, welcher Teil meines Codes dieses Problem verursacht, würde ich diese Frage natürlich nicht stellen. : D Das Problem ist, dass ich hier mein gesamtes Projekt nicht teilen kann. Ich habe keine Idee, was zu teilen. –

+0

Ich arbeite auch mit DNN und ich weiß, es ist zu schwer, das Problem zu verfolgen, besonders wenn Sie in DNN neu sind, stellen Sie zuerst sicher, dass Sie 'debug =" false "' in 'web.config' setzen, wenn dieser Code ist Teil von 'dll', fügen Sie' .pdb' Datei (n) hinzu, dann überprüfen Sie die 'EventLogs' Tabelle. Bitte melde dich, ob du diesen Teil gemacht hast oder nicht. –

Antwort

1

Sie wahrscheinlich einen Array hat, die zeitweise nicht Werte erhalten. Es würde uns sehr helfen, den Code zu zeigen.

Breakpoints sollten Ihnen helfen. Überprüfen Sie dann das Fenster Locals und Autos, um herauszufinden, warum es keinen Wert erhält.

+0

Ich erwähnte, dass ich weiß "warum" ich bin diesen Fehler bekommen. Es geht nicht darum "nicht zu wissen und zu versuchen, es herauszufinden". Es geht darum, "wie man es löst". –

1

Ich verwende einen try-catch Block im Page_Load des Moduls, das die fängt, sollte es vorkommen.

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

Jedes Mal, wenn es einen Fehler in dem Modul, wird es nicht vollständig abstürzen DNN und es wird der Fehler in der Ereignisanzeige protokollieren.

+0

Ich weiß nicht, welches Modul diesen Fehler verursacht. Wo sollte ich diesen "try-catch" setzen? –

+0

Idealerweise wäre es im 'Page_Load' eines jeden Moduls. – VDWWD

+0

Bitte überprüfen Sie das Bild, das ich angehängt habe, Die 'Objektreferenz ...' und das 'Index war außerhalb ...', sind passieren viel Zeit. Es gibt kein Web-Form-Modul, es ist ein Web-API-Projekt. –

Verwandte Themen