问题标签 [corrupted-state-exception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
572 浏览

c# - 跨 AppDomain 的损坏状态异常 (CSE)

对于一些背景信息,.NET 4.0 默认不再捕获 CSE:http: //msdn.microsoft.com/en-us/magazine/dd419661.aspx

我正在开发一个在新 AppDomain 中执行代码的应用程序。如果该代码抛出 CSE,如果未处理,异常会冒泡到主代码。我的问题是,我是否可以安全地假设第二个 AppDomain 上的 CSE 不会破坏主 AppDomain 中的状态,从而退出第二个 AppDomain 并继续运行主 AppDomain?

0 投票
2 回答
449 浏览

c# - 在 .NET 4 中捕获 AccessViolation。好还是坏?

文件中有 SECURITY_IDENTIFIER 结构类型的对象。我需要从此结构中获取所有者 SID。为了做到这一点,我调用GetSecurityDescriptorOwnerWinAPI 函数并创建System.Security.Principal.SecurityIdentifier(它具有以 IntPtr 作为参数的重载)

问题是文件中的这个结构有时会被破坏,所以我从 GetSecurityDescriptorOwner 获得的指针无效。它不是 IntPtr.Zero,它是无效的,所以当我创建SecurityIdentifier我得到的类型的对象时AccessViolationException,使用简单的 try-catch 是无法用 .NET 4 捕获的。

我知道允许捕获此类异常的属性,所以我暂时使用它,但我不喜欢这个解决方案。不建议捕获损坏状态异常 (CSE),但我没有看到任何其他解决方案。这个 WinAPI 函数返回给我无效的指针,我看不出有什么方法可以检查它的有效性。有任何想法吗?

更新

WinAPI

外部定义

更新

此代码有时会从 SecurityIdentifier 构造函数中抛出 Corrupted State Exceptions。有什么解决办法吗?

0 投票
1 回答
946 浏览

c# - 识别 CorruptedStateExceptions 的更好方法

让我们以更少的开销再试一次:

如何确定异常是否为 CorruptedStateException?

据我所知,所有 CorruptedStateExceptions 都没有继承(独占)的通用超类,而且我发现没有其他属性/标志/属性可以用来识别它们。

现在我能想到的最好的方法是分两步工作:在下面的情况下ThirdPartyCall,有属性[HandleProcessCorruptedStateExceptions][SecurityCritical]设置为捕获 CorruptedStateExceptions 而ThirdPartyCallInternal没有。如果ThirdPartyCallInternal捕捉到一个异常,它就不是 CSE,如果只ThirdPartyCall捕捉到它,它就是一个。

是否有任何其他(更清洁,更简单,......)方法来确定异常是否是 CorruptedStateException 会导致应用程序关闭?

0 投票
1 回答
1373 浏览

c# - 检测异常是否为损坏状态异常

我有一些调用 Rotativa 的代码,它调用 wkhtml2pdf。我怀疑我看到 wkhtml2pdf.exe 导致抛出损坏状态异常 (CSE) 的行为。如果抛出 CSE,我想捕获并记录它,这样我就可以追踪它发生的位置。

当我让应用程序在调试器中整夜运行时,当我回来时,VS 已关闭。有时它已重新启动,有时则没有。怀疑内存损坏我开始研究并偶然发现了 CSE 处理。

我正在做这样的事情:

有没有办法检测异常是否是 General Catch 中的 CSE?

我看到他们有 2 个一般例外条款。内部不处理 CSE 并设置一个标志。如果在没有标志的情况下调用外部的,则它是 CSE,但我希望有更清洁的东西。我想做的是记录这个糟糕的状态,然后将它传递给应用程序以正常冒泡。

当我查看导致 VS2013 崩溃的事件日志中的错误时,我得到以下信息:

应用程序:devenv.exe 框架版本:v4.0.30319 描述:进程因未处理的异常而终止。异常信息:异常代码 c0000005,异常地址 4DA44C1F 堆栈:Microsoft.VisualStudio.Debugger.Clr.NativeDkmClrModuleInstance.ProcF4BC786AEBAC294EE9C4C0BB1B0F56A7(IntPtr, IntPtr ByRef) 上 Microsoft.VisualStudio.Debugger.Clr.DkmClrModuleInstance.GetMetaraceData.Conport() .MetadataHelper..ctor(Microsoft.VisualStudio.Debugger.Clr.DkmClrModuleInstance) 在 Microsoft.IntelliTrace.Concord.Integration.CpdeNotifyPointServiceAdapter.InstallBreakpoint(Microsoft.VisualStudio.Debugger.Clr.DkmClrModuleInstance, Microsoft.VisualStudio.Debugger.Interop.Internal.NP_INSTALL_REQUEST )
在 Microsoft.IntelliTrace.Concord.IntelliTraceProcessState.AlertModuleLoad(Microsoft.VisualStudio.Debugger.DkmModuleInstance) 在 Microsoft.IntelliTrace.Concord.NotifyPoints 在 Microsoft.IntelliTrace.Concord.Integration.CpdeNotifyPointServiceAdapter.BindToModule(Microsoft.VisualStudio.Debugger.Clr.DkmClrModuleInstance) .NotifyPointManager.OnModuleInstanceLoad(Microsoft.VisualStudio.Debugger.DkmModuleInstance, Microsoft.VisualStudio.Debugger.DkmWorkList, Microsoft.VisualStudio.Debugger.DkmEventDescriptorS) 在 Microsoft.VisualStudio.Debugger.EntryPoint.IDkmModuleInstanceLoadNotification_OnModuleInstanceLoad(IntPtr, IntPtr, IntPtr, IntPtr)

其次是:

错误应用程序名称:devenv.exe,版本:12.0.30501.0,时间戳:0x5361f453 错误模块名称:vsdebugeng.impl.DLL,版本:12.0.30501.0,时间戳:0x5361f482 异常代码:0xc0000005 错误偏移:0x00094c1f 错误进程 id: 0x1c9c 错误应用程序启动时间:0x01cfe7cc0cf50465 错误应用程序路径:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe 错误模块路径:C:\Program Files (x86)\Microsoft Visual Studio 12.0\ Common7\Packages\Debugger\vsdebugeng.impl.DLL 报告 ID:097b17c6-5438-11e4-8409-001f2904053c

0 投票
2 回答
172 浏览

c# - 如何在特定异常上终止 .NET 应用程序 - 可能没有堆栈展开?

我有一个由 C# 和 C++ 代码组成的 .NET 应用程序(服务)。

C++ 代码中的“崩溃”(即System.AccessViolationException和其他损坏状态异常)将被(“非”)正确处理,它们将直接导致我的AppDomain.CurrentDomain.UnhandledException处理程序(记录),然后应用程序将终止,写入 WER 转储文件,如果如此配置(就是这样)。

对于这个应用程序,我确定这System.NullReferenceException始终是一个错误,特别是因为一些 C++/CLI 访问冲突错误会报告这个错误而不是 AV。

有没有办法让.NET捕获NullReferenceException异常边界(OnTimer在这种情况下是我的回调),而是直接终止应用程序,而不展开堆栈,基本上直接“跳转”到AppDomain.CurrentDomain.UnhandledException

0 投票
0 回答
277 浏览

vb.net - FTP:下载的 zip 文件损坏 (VB.net)

我正在尝试每周自动下载一次大型 zip 文件。到目前为止,我已经设法检查是否上传了新文件并且我已准备好开始下载,但我遇到了一些问题。我正在下载的文件超过 2.2 GB (Zip),所以这是一个相当大的文件,每次我测试新的代码时,我都需要等待 5-10 分钟才能再次下载文件。我在底部有一个更复杂的代码,这里先有一个简单的代码。一旦传输最后几个字节,两者都会导致相同的错误。

是的,这是 ftp 主机的实际登录信息,所以如果您想在发布可能的解决方案之前测试您的代码 - 请随意。一旦文件即将完成下载,我就会收到此异常:

我也试过这个我在网上找到的稍微复杂的版本:

这两种解决方案似乎都工作得很好,我可以在我的测试文件夹上跟踪文件大小的增加,直到它冻结几秒钟然后返回相同的异常:

希望你对这个问题有一个解释!

0 投票
3 回答
12003 浏览

c# - 优雅地处理损坏的状态异常

此问题相关,我想强制 CLR 让我的 .NET 4.5.2 应用程序捕获损坏状态异常,其唯一目的是记录它们然后终止应用程序。如果我catch (Exception ex)在应用程序周围的几个地方都有这样做的正确方法是什么?

所以,在我指定<legacyCorruptedStateExceptionsPolicy>属性之后,如果我理解正确,所有的catch (Exception ex)处理程序都会像这样捕获异常AccessViolationException并愉快地继续。

是的,我知道这catch (Exception ex)是一个坏主意™,但如果 CLR 至少将正确的堆栈跟踪放入事件日志中,我会非常乐意向客户解释他的服务器应用程序在凌晨 1 点快速失败并离线晚上是个好东西。但不幸的是,CLR 在事件日志中记录了一个不相关的异常,然后关闭了进程,这样我就无法查明实际发生了什么。

问题是,如何在整个过程中实现这一点:

(更新)

换句话说,这可能适用于简单应用程序中的大多数异常:

但是,它不适用于:

  • 未处理的应用程序域异常(即在非前台线程上抛出)
  • Windows 服务应用程序(没有实际Main入口点)

所以这似乎<legacyCorruptedStateExceptionsPolicy>是完成这项工作的唯一方法,在这种情况下,我不知道在登录 CSE 后如何失败?

0 投票
0 回答
642 浏览

c# - 无法捕获损坏的状态异常

我在使用框架 .NET 4.5.1 的应用程序中收到损坏状态异常 (CSE)。从事件查看器获取的这个异常是:

框架版本:v4.0.30319

说明:由于 IP 000007FEEB8F75CB (000007FEEB7B0000) 处的 .NET 运行时中的内部错误,该进程已终止,退出代码为 80131506。

我通过使用问题如何在 .NET 4 中模拟损坏状态异常?

我在事件 UnhandledException 的处理程序上使用属性 HandleProcessCorruptedStateExceptions 和 SecurityCritical ,如 haindl 对问题优雅处理损坏状态异常的响应中所述。

但我无法用它捕捉到这个错误。为什么 ?

这适用于生成的访问冲突:

执行我记录错误消息的处理程序的代码,但当然,我没有收到与我的应用程序中相同的错误。

更新:

我试图通过重现此问题中描述的 3 个步骤来捕获 CSE :

  1. 重新编译为 .NET 3.5 程序集并在 .NET 4.0 中运行。

  2. 在配置/运行时元素下的应用程序配置文件中添加一行:

  3. 使用 HandleProcessCorruptedStateExceptions 属性装饰您想要捕获这些异常的方法。有关详细信息,请参阅 http://msdn.microsoft.com/en-us/magazine/dd419661.aspx#id0070035

但这对我不起作用!

我的代码是:

我的 app.config 文件是:

为什么 CSE 没有被抓到?

注意我必须允许代码以不安全模式构建,因为以下行代码需要它:

byte* p = (byte*)pin.AddrOfPinnedObject();

我再说一遍,它只是为了调试。目标是在更大的应用程序中找到发生此错误类型的代码部分,以便进行修复。

0 投票
1 回答
95 浏览

go - 每当我使用 go 尝试任何命令时,输出都会显示我的 go-build 已损坏且无法读取

每当我运行任何 go 命令(除了go help)时,输出都是这样的:

我不确定为什么会发生这种情况,我已经尝试重新启动,并且暂时修复了它,但是在执行了几个命令之后,这种情况又开始发生了。我不确定这是否会有所帮助,但我的用户名LUCAS_~1不是Lucas_000. 另外,我检查了我的Temp文件夹,似乎没有任何名为“go-build268335003”的东西。

任何帮助将不胜感激,谢谢!

0 投票
3 回答
1781 浏览

c# - 优雅地处理 .NET Core 中的损坏状态异常

我基本上有一个重复的问题,但对于 .NET Core。

我有核心控制台应用程序:

我试图添加一个 Settings.setting 文件

我尝试根据文档设置环境变量:

或者

(在 Windows 上)。但是没有任何效果,应用程序总是在不打印异常的情况下严重崩溃。