我最近实现了一些向量异常处理来捕获我们软件中的错误。这在我们刚刚从 vc6 转换到 vs2005 时特别有用。我们在使用 STL 库时遇到了一些问题(通常人们会做他们不应该做的事情)。我试图用我的向量异常处理程序来捕获这些错误。
但是,这似乎没有被调用,而是这些错误由 Microsoft Visual Studio C 运行时库在内部处理。
我的问题是;
有没有办法关闭运行时错误检查并将异常传递给 VE 处理程序?
谢谢丰富
http://msdn.microsoft.com/en-us/library/aa985973%28VS.80%29.aspx
#define _SECURE_SCL 1
#define _SECURE_SCL_THROWS 1
以上允许我抛出异常。
您可以关闭额外的运行时检查。但是,并非所有此捕获的错误都会导致您可以拦截的崩溃。
附带说明:这些检查通常会消耗大量性能,并且默认情况下不会在发布版本中关闭。
#define _SECURE_SCL 0
最好通过项目设置来做到这一点,因为如果文件内部或文件之间的设置不同,您可能会遇到令人讨厌的链接器问题。
不久前我遇到了这个问题,我花了一些时间来了解他们在运行时所做的事情。我建议至少阅读 MSDN 上的“从 Visual C++ 的早期版本迁移”两遍。然后阅读“C 库的扩展,第一部分:边界检查接口 (ISO/IEC TR 24731-1)”。后者是大多数参数检查所基于的标准。
一旦您了解了它们的用途,只需在您的项目设置中定义_CRT_SECURE_NO_DEPRECATE
、_SECURE_SCL
和。_SECURE_SCL_THROWS
然后确保在您的项目中将“启用 C++ 异常”设置为“是,使用 SEH 异常 (/EHa)”并将“基本运行时检查”设置为“默认”。至少,这就是现在对我们有用的东西。不过,删除我们在 VC6 下创建的错误代码确实需要一些时间。
您可以做的最重要的事情是留出几周时间,真正深入研究各种选项和宏的作用。然后弄清楚什么适用于您的代码。我们没有足够早地做到这一点,一旦我们有一些“糟糕的构建”使其脱离工程,它就会受到很大的伤害。