作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 C# 应用程序 App A
,它通过 P/Invoke 调用 C++ (Qt) DLL App B
。假设我无法以任何方式编辑 App B
,但我知道 App B
正在抛出一个 Out of Memory Exception
under a set在将输入从 App A
传递到 App B
之前,我可以复制但不能准确测试的条件。此异常不会对 App A
造成任何威胁,如果 App B
可以某种方式“重置”,则可以忽略此异常,但当 App B
调用 abort()
导致 App A
运行时终止。
如何防止 App B
不可避免的、不可预测的、通常是普通的崩溃影响 App A
?
注释:
UnhandledExceptionHandler
。App B
由于 QtWebkit 中的一个错误而崩溃,App B
可以通过删除超大对象并返回 null 来轻松处理该错误。App A
不会报告内存不足,并且机器有足够的内存来多次执行 App B
的操作,无论错误如何,但无论出于何种原因,此内存显然未分配给 App B
。最佳答案
您创建一个 shim 进程,其唯一目的是加载 App B 并使用一些 IPC 机制与 App A 通信。App A 生成 shim,如果 shim 崩溃,则 App A 采取适当的操作(重新生成,传达错误给用户等)。
关于c# - 通过P/Invoke防止应用程序调用库发生graceless crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736821/
我是一名优秀的程序员,十分优秀!