1

我最近实现了一些向量异常处理来捕获我们软件中的错误。这在我们刚刚从 vc6 转换到 vs2005 时特别有用。我们在使用 STL 库时遇到了一些问题(通常人们会做他们不应该做的事情)。我试图用我的向量异常处理程序来捕获这些错误。

但是,这似乎没有被调用,而是这些错误由 Microsoft Visual Studio C 运行时库在内部处理。

我的问题是;

有没有办法关闭运行时错误检查并将异常传递给 VE 处理程序?

谢谢丰富

4

4 回答 4

2

http://msdn.microsoft.com/en-us/library/aa985973%28VS.80%29.aspx

#define _SECURE_SCL 1
#define _SECURE_SCL_THROWS 1

以上允许我抛出异常。

于 2009-08-25T14:15:55.063 回答
0

您可以关闭额外的运行时检查。但是,并非所有此捕获的错误都会导致您可以拦截的崩溃。

附带说明:这些检查通常会消耗大量性能,并且默认情况下不会在发布版本中关闭。

于 2009-08-25T13:58:23.433 回答
0

#define _SECURE_SCL 0

最好通过项目设置来做到这一点,因为如果文件内部或文件之间的设置不同,您可能会遇到令人讨厌的链接器问题。

于 2009-08-25T14:03:12.803 回答
0

不久前我遇到了这个问题,我花了一些时间来了解他们在运行时所做的事情。我建议至少阅读 MSDN 上的“从 Visual C++ 的早期版本迁移”两遍。然后阅读“C 库的扩展,第一部分:边界检查接口 (ISO/IEC TR 24731-1)”。后者是大多数参数检查所基于的标准。

一旦您了解了它们的用途,只需在您的项目设置中定义_CRT_SECURE_NO_DEPRECATE_SECURE_SCL和。_SECURE_SCL_THROWS然后确保在您的项目中将“启用 C++ 异常”设置为“是,使用 SEH 异常 (/EHa)”并将“基本运行时检查”设置为“默认”。至少,这就是现在对我们有用的东西。不过,删除我们在 VC6 下创建的错误代码确实需要一些时间。

您可以做的最重要的事情是留出几周时间,真正深入研究各种选项和宏的作用。然后弄清楚什么适用于您的代码。我们没有足够早地做到这一点,一旦我们有一些“糟糕的构建”使其脱离工程,它就会受到很大的伤害。

于 2009-08-25T14:21:21.013 回答