每当用户报告错误时,例如
System.Runtime.InteropServices.SEHException - 外部组件引发了异常?
我作为程序员可以做些什么来确定原因?
场景:一个用户(使用我公司编写的程序)报告了此错误.这可能是也可能不是一次性错误.他们提到,在上个月,计算机已经两次"停止工作".我从经验中学到了,不是太过于字面意思,因为它通常意味着与计算机有关的人没有按预期工作.他们无法给我更多细节,我找不到任何记录错误.因此它可能是也可能不是这个错误.
从堆栈跟踪中,实际错误是在构造一个不直接调用任何互操作代码的类时,但可能因为该对象可能是与DevExpress Grid数据绑定的列表的一部分而复杂化.
错误被未处理的异常例程"捕获",该例程通常会关闭程序,但可以选择忽略并继续.如果他们选择忽略错误,则程序继续工作,但下次运行此例程时会再次出现错误.但是,在关闭并重新启动应用程序后,它不会再次出现.
有问题的电脑似乎没有压力.它正在运行Vista Business,拥有2GB的内存,根据任务管理器,我们的应用程序只使用了大约一半,只有大约200Mb.
还有一条信息可能相关或不相关.同一程序的另一部分使用第三方组件,它实际上是一个围绕本机dll的dotnet包装器,这个组件确实有一个已知的问题,偶尔,你得到一个
尝试读取或写入受保护的内存.这通常表明其他内存已损坏
组件制造商表示,这已在我们内部使用的最新版本的组件中修复,但尚未向客户提供.
鉴于错误的后果很少(没有工作丢失并重新启动程序并返回到最多只需要一分钟的时间)并且考虑到客户将很快获得新版本(更新后的第三个 - 派对组件),我显然可以交叉手指,希望错误不再发生.
但还有什么我可以做的吗?
是.此错误是未映射到.NET错误的结构化异常.可能是你的DataGrid映射抛出了未被捕获的本机异常.
您可以通过查看ExternalException.ErrorCode属性来判断发生了什么异常.我会检查您的堆栈跟踪,如果它与DevExpress网格绑定,请向他们报告问题.
当我的程序第一次使用本机dll包装器时,我遇到了类似的SEHException问题.原来,该包装器的原生DLL丢失了.这个例外对解决这个问题没有任何帮助.到底有什么帮助是在后台运行procmon并检查加载所有必需的DLL时是否有任何错误.
如果您遇到此帖中描述的问题:
asp.net mvc调试器抛出SEHException
然后解决方案是:
如果您有来自Trusteer的任何应用程序(如支持或任何东西),只需卸载并重新启动系统,它就可以正常运行...在此处找到此解决方案:
http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+thrown+when+I+run+the+application