gpt4 book ai didi

.net - 是否可以在.NET中捕获访问冲突异常?

转载 作者:行者123 更新时间:2023-12-03 09:20:38 24 4
gpt4 key购买 nike

我有什么办法可以捕捉到AccessViolationException吗?它是由我无法控制的非托管DLL抛出的。

最佳答案

你不应该访问冲突是一个严重的问题:这是写入(或读取)无效内存地址的意外尝试。正如John已经阐明的那样,在引发访问冲突之前,非托管DLL可能已经损坏了进程内存。这可能会对当前过程的任何部分产生不可预测的影响。

最安全的做法是可能通知用户,然后立即退出。

更多详细信息:访问冲突是OS异常(所谓的SEH或结构化异常处理异常)。与System.Exception中的托管CLR异常不同,这是另一种异常。在纯托管代码中,您很少会看到SEH异常,但是如果发生这种情况,例如在非托管代码中,CLR会将其交付给托管代码,您也可以在其中捕获它。

但是,捕获SEH异常通常不是一个好主意。 MSDN杂志中的Handling Corrupted State Exceptions文章解释了更多详细信息,其摘录自以下文本:

The CLR has always delivered SEH exceptions to managed code using the same mechanisms as exceptions raised by the program itself. This isn't a problem as long as code doesn't attempt to handle exceptional conditions that it cannot reasonably handle. Most programs cannot safely continue execution after an access violation. Unfortunately, the CLR's exception handling model has always encouraged users to catch these serious errors by allowing programs to catch any exception at the top of the System.Exception hierarchy. But this is rarely the right thing to do.



1在.NET 3.5之前都是如此。在.NET 4中,行为已更改。如果仍然希望能够捕获此类异常,则必须将 legacyCorruptedState­­ExceptionsPolicy=true添加到app.config中。上面链接的文章中的更多详细信息。

关于.net - 是否可以在.NET中捕获访问冲突异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3312003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com