您应该如何诊断错误 SEHException - 外部组件抛出异常
-
19-09-2019 - |
题
每当用户报告错误时,例如
System.Runtime.InteropServices.SEHException - 外部组件引发的异常?
作为一名程序员,我可以做些什么来确定原因吗?
设想 :一位用户(使用我公司编写的程序)报告了此错误。这可能是也可能不是一次性错误。他们提到,上个月,电脑已经两次“停止工作”。我从经验中学到,不要太字面地理解这个描述,因为这通常意味着与计算机相关的某人没有按预期工作。他们无法向我提供更多详细信息,我也找不到任何记录的错误。因此,可能是也可能不是这个错误。
从堆栈跟踪来看,实际的错误是在构造一个不直接调用任何互操作代码的类时出现的,但可能由于该对象可能是数据绑定到 DevExpress 网格的列表的一部分而变得复杂。
该错误被未处理的异常例程“捕获”,该例程通常会关闭程序,但可以选择忽略并继续。如果他们选择忽略该错误,则程序会继续工作,但下次运行该例程时会再次出现错误。然而,关闭并重新启动我们的应用程序后,它没有再次发生。
所讨论的计算机似乎没有受到压力。它运行的是 Vista Business,拥有 2GB 内存,根据任务管理器的数据,我们的应用程序只使用了大约一半的内存,而我们的应用程序只有大约 200Mb。
还有另一条信息可能相关,也可能不相关。同一程序的另一部分使用第三方组件,该组件实际上是本机 dll 的 dotnet 包装器,并且该组件确实存在一个已知问题,您偶尔会遇到
尝试读取或写入受保护的内存。这通常表明其他内存已损坏
组件制造商表示,这个问题已在我们内部使用的最新版本组件中得到修复,但尚未提供给客户。
鉴于错误的后果很低(不会丢失任何工作,重新启动程序并返回到原来位置最多只需要一分钟),并且考虑到客户很快就会获得新版本(更新后的第三个版本) party 组件),我显然可以祈祷并希望错误不会再次发生。
但我还能做些什么吗?
解决方案
是。这个错误是未映射到.NET错误结构化异常。这也可能是您的DataGrid映射抛出一个机异常,这是未捕获的。
您能告诉什么异常被看的 ExternalException.ErrorCode 财产。我会检查你的堆栈跟踪,如果它绑在DevExpress的网格,将问题报告给他们。
其他提示
我与当我的节目第一次使用本机DLL包装,被抛出的SEHException类似的问题。原来,该包装的原生DLL不见了。唯一的例外是在没有办法解决这很有帮助。到底是什么做帮助下在后台运行procmon中,并检查是否加载所有必要的DLL时发生了错误。
如果您遇到本文所述的问题:
asp.net mvc 调试器抛出 SEHException
那么解决方案是:
如果您有 Trusteer 的任何应用程序(例如 rapport 或其他任何东西),只需卸载并重新启动您的系统,它就会正常工作...在这里找到了这个解决方案:
http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+抛出+when+I+run+the+application
在零组件厂商说,这已被固定在其组件的最新版本,我们正在使用的内部,但是这已经给客户呢。
请问组件制造商如何测试客户越来越问题是,他们说,他们已经固定在其最新版本的问题,没有/部署其最新版本客户之前。
我所遇到的此错误时,应用程序驻留在网络共享,并且该装置(笔记本电脑,平板电脑,...)变成从网络而应用程序是在使用中断开。在我的情况,这是由于Surface平板走出去的无线覆盖范围。安装好后,WAP没有问题。
只是另一个信息... 今天有一个Windows 2012 R2 x64的TS系统,如果应用程序是从UNC /网络路径开始对这一问题。这个问题发生的所有终端服务器用户一个应用程序。 执行应用程序在本地工作没有问题。重新启动后,它再次开始工作 - 在SEHException的抛出已经构造函数初始化和TargetInvocationException
我的机器配置:
操作系统:视窗10版1703(x64)的
我在调试在Visual Studio 2017年社区版我的C#.NET项目面临过这样的错误。余物通过进行P个调用本机方法/调用上的C ++组件装载在运行时。我遇到由OP报告的非常相同的错误。
我意识到的Visual Studio用而这不是计算机的管理员的用户帐户启动。然后我重新启动下,这是本机的管理员不同的用户帐户的Visual Studio。就这样。我的问题得到了解决,我没有再次面对这个问题。
有一点要注意的是,这是正在对C ++组件调用的方法是应该写一些东西在注册表中。我没去调试C ++代码做一些RCA,但我看到一种可能性,即由于管理权限的要求写在Windows 10操作系统注册表整个事情失败。所以,早些时候的Visual Studio是在其没有足够的计算机管理权限的用户帐户运行,则本地电话都没有。