English 中文(简体)
我能否在坠毁的非洲问题顾问办软件上尝试/捕获?
原标题:Can I put try / catch around an OS API that crashes?
  • 时间:2009-11-11 17:12:06
  •  标签:

我利用WindowsOS图书馆操纵图像档案。 有时,由于没有任何明显原因,它深处坠毁——所有投入都是合理的,不是一 issue的问题。 坠毁是A/V。

因此,这样一来,哪一方是:

try {
  pFoo = OsAPIThatCrashes();
} catch {
  pFoo = NULL;
}

这甚至会奏效? 我们的法典没有在任何地方使用例外。

问题回答

一方面,尽管我们都希望在其软件中弥补缺陷,但在100个案例中,监评系统在99个病例中,问题在监督厅、汇编者或标准图书馆中是一杯子,但在称为该图书馆的法典中。 无论温·普森特是你重新使用,它比大多数(如果不是全部)法典使用得更彻底。

此外,try/code>。 涵盖C++例外,而不是本组织的例外。 (《维也纳条约法公约》的较正式版本的确存在这种错误,但后来的版本有正确的违约。) ∗∗∗∗∗∗ 尽管如此,世界投资中心提供了追捕本组织例外情况的办法。 我认为,它被称为结构化的例外处理,并围绕try/__fish进行集中处理,但我并不肯定,因为我从未使用过。 然而:

一旦申请进入AV,所有床位就消失。 事实调查只是表明自己身份的不明确行为的一种方式,而且一旦你(或者,尽管不可能)援引未经界定的行为,你就无法假定你的申请情况。 你不应继续。

概述: 你们应努力找出你们的错误。 这样做的一个良好方式是试图将问题推向一个小小小小小条的例子,以复制这一问题。 在90%的案例中,这将暴露出错误。 如果哪怕是一部小的法典照搬了这一问题,而且你仍然不知道问题是什么,那么你就有一个冰 re,可以回来(或向管理系统提供支持)。 在10%的其他人中,有9人指出你的错误,只有1%的人显示你 t的 b。

先决条件是,这 won不错——只有在非洲顾问办提出你可以追捕的例外的情况下,才会有所帮助。 如果是这样做的话,而且你赶上了例外情况,你通常会从申请中退出,并发出错误信息,大意是,它已经放弃了一种排他性的例外。 除非你再次看到这一总秩序,否则,把呼吁划入一个试块就没有什么好处。

视本组织而定,您可能利用本土例外处理机制,以完成更多的工作——例如,在Windows之下,你可以通过有条理的例外处理来收集像页数这样的问题。 同样,这并不完全清楚,如果一个没有处理的例外是问题的根源,那么这是否会有好处,但如果该法典有一小ug,(例如)X=10和Y=20值会导致无限的漏洞,或者根据该命令,你可能不得不在密码坠毁时 down,并确保永远不会发生这种情况。

目前,图书馆的内部状况可能很糟,因此继续使用它是一种危险。 最好设置、坠毁或使用不同的图书馆。 有时,生命只是空洞。

虽然“快乐”是一种C图书馆,并不使用例外情况,但“特别安全”中心可以实施某些例外(如零分立),而这种例外方式(按照C++标准)需要做。 因此,它取决于。

你的最好之道是找出造成这一问题的原因,并确定这一问题。

你不妨探讨结构化的特殊处理方法。 结构化的例外处理和终止处理机制是Windows操作系统的组成部分:

审判/捕获是C++例外情形,需要使用的是

__try {
} __except(EXCEPTION_EXECUTE_HANDLER) {
}

但是,这一切都是例外,它赢得了解决问题的 t,有可能使图书馆(或您的 app)陷入一个不一致的国家。 如果该例外是浮动点例外,那么你就很有可能忽视它,但如果它违反了准入,那么你可能只是拖延坠机。

如果你可以把它排在某种例外情况下,那么你只能捕获和食用这种例外情况。

long WINAPI filter(EXCEPTION_POINTERS * pex)
{
   EXCEPTION_RECORD * per = pex->ExceptionRecord;
   DWORD dwCode = per->ExceptionCode;

   if (EXCEPTION_DATATYPE_MISALIGNMENT == dwCode)
      return EXCEPTION_CONTINUE_SEARCH; // let a handler above us deal with it.
   else if (EXCEPTION_FLT_DIVIDE_BY_ZERO == dwCode)
      return EXCEPTION_EXECUTE_HANDLER; // Eat this one

   return EXCEPTION_CONTINUE_SEARCH; // let all the rest on through...
}

__try {
 ...
} __except(filter(GetExceptionInformation())) {
}




相关问题