莫名其妙的奇怪异常
Posted
技术标签:
【中文标题】莫名其妙的奇怪异常【英文标题】:Strange exceptions out of nowhere 【发布时间】:2015-03-19 17:35:09 【问题描述】:我正在研究一个 .net 中间件结构,最近在调试应用程序大约 20-30 秒后突然出现以下异常。
System.Reflection.AmbiguousMatchException was unhandled
Message: An unhandled exception of type 'System.Reflection.AmbiguousMatchException' occurred in mscorlib.dll
Additional information: Ambiguous match found.
奇怪的是我没有改变任何一行代码,我只是在调试它。当我在发布模式下将它安装为服务时,它可以工作。此外,它正在其他计算机上运行。 当我第一次遇到这种奇怪的行为时,我重新安装了我的电脑,突然异常消失了。但是在调试模式下第二次启动中间件后,异常又回来了。 请注意,我没有更改 DEBUG 首选项中的任何内容。
以下是发生异常时输出日志中的更多详细信息。
System.Transactions 严重:0: http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled未处理 异常
mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089不明确 找到匹配。在 System.DefaultBinder.FindMostDerivedNewSlotMeth(MethodBase[] 匹配, Int32 cMatches)
hermeskim.Middleware.Service.vshost.exeSystem.Reflection.AmbiguousMatchException,
at System.RuntimeType.GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, ParameterModifier[] 修饰符)
at System.Reflection.Emit.TypeBuilder.GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] 修饰符)
在 System.Type.GetMethod(字符串名称) 在 System.Activities.Debugger.State.GetMethodInfo(带启动的布尔值) 在 System.Activities.Debugger.StateManager.InvokeWorker(对象 islandArguments,VirtualStackFrame stackFrame) 在 System.Activities.Debugger.ThreadWorkerController.Worker(Boolean isAtStartup)
在 System.Activities.Debugger.ThreadWorkerController.WorkerThreadProc() 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态) 在 System.Threading.ThreadHelper.ThreadStart()System.Reflection.AmbiguousMatchException:找到不明确的匹配。 在 System.DefaultBinder.FindMostDerivedNewSlotMeth(MethodBase[] 匹配,Int32 cMatches)
at System.RuntimeType.GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, ParameterModifier[] 修饰符)
at System.Reflection.Emit.TypeBuilder.GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] 类型, ParameterModifier[] 修饰符) 在 System.Type.GetMethod(字符串名称) 在 System.Activities.Debugger.State.GetMethodInfo(带启动的布尔值) 在 System.Activities.Debugger.StateManager.InvokeWorker(对象 islandArguments,VirtualStackFrame stackFrame) 在 System.Activities.Debugger.ThreadWorkerController.Worker(Boolean isAtStartup)
在 System.Activities.Debugger.ThreadWorkerController.WorkerThreadProc() 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()
【问题讨论】:
您能添加您要调用的代码吗? 看来您的参考资料不正确。也许您正在手动添加一些系统库,或者您有一个奇怪的程序集清单? 很遗憾,我无法添加任何代码。当应用程序已经运行时,异常会在一段时间后随机启动。我看不出它是从哪里来的。调试器告诉我,如果我想查看更多详细信息,我必须禁用“仅我的代码”并加载符号。但即使我这样做了,我也没有得到更多信息。还有一点需要注意:异常发生在调试器线程本身。 @Hannes 上次我遇到这样的行为(调试下降,正常运行就像没有伙伴的业务一样继续)这是调用函数的无限循环,它自己调用它,所以你最好先禁用看起来很奇怪的东西并寻找一些奇怪的引用调用 但是代码至少一个月是一样的,我们一直在调试。我是唯一一个得到这些例外的人。 windows更新有可能做到这一点吗?我是唯一一个默认启用它们的人... 【参考方案1】:问题出在配置文件中,我不小心启动了相同的工作流程 2 次。
【讨论】:
以上是关于莫名其妙的奇怪异常的主要内容,如果未能解决你的问题,请参考以下文章