Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “如何调试”;索引超出了数组的边界;在DNN中_C#_Debugging_Dotnetnuke - Fatal编程技术网

C# “如何调试”;索引超出了数组的边界;在DNN中

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

我知道这个错误,已经有人问了几十个问题。但我的问题不是“为什么”,而是“如何调试”

我已经安装了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()
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项目。