C# “如何调试”;索引超出了数组的边界;在DNN中
我知道这个错误,已经有人问了几十个问题。但我的问题不是“为什么”,而是“如何调试” 我已经安装了DNN CMS,并为其开发了一个模块。有时它会抛出以下错误:C# “如何调试”;索引超出了数组的边界;在DNN中,c#,debugging,dotnetnuke,C#,Debugging,Dotnetnuke,我知道这个错误,已经有人问了几十个问题。但我的问题不是“为什么”,而是“如何调试” 我已经安装了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 s
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()
at System.Collections.Generic.List`1.Enumerator.MoveNext()
在System.Linq.Enumerable.d_u58`1.MoveNext()中
在System.Linq.Buffer`1..ctor处(IEnumerable`1源)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1源)
位于System.Web.Http.Services.DefaultServices.GetServices(类型serviceType)
在System.Web.Http.ServicesExtensions.GetServices[TService](ServicesContainer服务)
位于System.Web.Http.ModelBinding.ModelBinderAttribute.GetModelBinderProvider(HttpConfiguration)
位于System.Web.Http.ModelBinding.ModelBinderAttribute.GetModelBinder(HttpConfiguration配置,类型modelType)
位于System.Web.Http.ModelBinding.ModelBinderAttribute.GetBinding(HttpParameterDescriptor参数)
位于System.Web.Http.ModelBinding.DefaultActionValueBinder.GetParameterBinding(HttpParameterDescriptor参数)
在System.Array.ConvertAll[TInput,TOutput](TInput[]数组,Converter`2 Converter)
位于System.Web.Http.ModelBinding.DefaultActionValueBinder.GetBinding(HttpActionDescriptor actionDescriptor)
位于System.Web.Http.Tracing.Tracers.ActionValueBinderTracer.System.Web.Http.Controllers.IActionValueBinder.GetBinding(HttpActionDescriptor actionDescriptor)
在System.Web.Http.Controllers.HttpActionDescriptor.get_ActionBinding()上
位于System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem..ctor(HttpControllerDescriptor controllerDescriptor)
位于System.Web.Http.Controllers.ApiControllerActionSelector.GetInternalSelector(HttpControllerDescriptor controllerDescriptor)
在System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)
在System.Web.Http.Tracing.Tracers.HttpActionSelectorTracer.c_uuDisplayClass2.b_uuu0()中
在System.Web.Http.Tracing.ITraceWriterExtensions.TraceEnginend(ITraceWriter traceWriter、HttpRequestMessage请求、字符串类别、TraceLevel、字符串运算符名称、字符串运算符名称、操作'1 BeginCe、操作执行、操作'1 endTrace、操作'1 errorTrace)
位于System.Web.Http.Tracing.Tracers.HttpActionSelectorTracer.System.Web.Http.Controllers.IHttpActionSelector.SelectAction(HttpControllerContext controllerContext)
位于System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext,CancellationToken CancellationToken)
在System.Web.Http.Tracing.Tracers.HttpControllerTracer.d_u5.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Web.Http.Tracing.itraceWriteExtensions.d_u18`1.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Web.Http.Dispatcher.HttpControllerDispatcher.d_u1.MoveNext()中
正如您所看到的,我的代码在任何地方都没有足迹。这都是系统代码,我不知道如何进行故障排除和调试。我只是重新启动我的应用程序池,一切正常,过了一会儿,这个错误再次出现
我应该如何调试此错误?我如何找到问题的根源
对于任何认为这是一个模块的人,这是一个简单的Web Api,如下图所示:
您可能有一个数组间歇性地不获取值。向我们展示代码会很有帮助
断点应该对您有所帮助。然后,检查
Locals
和Autos
窗口,找出它没有得到任何值的原因。我在模块的页面加载
中使用一个try catch
块,如果出现ProcessModuleLoadException
,该模块将捕获ProcessModuleLoadException
protected void Page_Load(object sender, EventArgs e)
{
try
{
buildModule();
}
catch (Exception ex)
{
Exceptions.ProcessModuleLoadException(this, ex);
}
}
每当模块中出现错误时,它不会完全使DNN崩溃,它会将错误记录在事件查看器中。共享代码,并指出生成exceptionDear@un lucky的行,如果我知道代码的哪一部分导致此问题,我当然不会问这个问题:问题是我不能在这里分享我的整个项目。我不知道要分享什么。我也在与DNN合作&我知道跟踪问题太难了,特别是如果您是DNN新手,首先确保在
web.config
中设置debug=“false”
,如果此代码是dll
的一部分,也添加.pdb
文件,然后检查EventLogs
表。请报告你是否做了这部分。@MehdiDehghani我都做了。错误没有出现在事件日志中
@EghbalSohrabi请提及DNN版本,也就是说,代码在普通用户控件(代码文件模式)中,还是在DLL(类库或用户控件,代码隐藏模式)中?我提到我知道“为什么”会出现此错误。这不是“不知道也不想知道”。这是关于“如何解决它”。我不知道是哪个模块导致了这个错误。我应该把这个try catch
放在哪里?理想情况下,它应该放在每个模块的页面加载中。请检查我附加的图像,对象引用…
以及索引在外部…
,这些情况经常发生。没有web表单模块,它是一个web api项目。