向量异常处理程序和Microsoft C运行时错误处理

时间:2009-08-25 13:55:23

标签: c++ c exception runtime handler

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

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

我的问题是;

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

由于 富

4 个答案:

答案 0 :(得分:2)

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

#define _SECURE_SCL 1
#define _SECURE_SCL_THROWS 1

以上允许我抛出异常。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

#define _SECURE_SCL 0

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

答案 3 :(得分:0)

前一段时间我遇到了这个问题,我花了一些时间来了解他们在运行时所做的事情。我建议至少在MSDN上阅读"Migrating from Previous Versions of Visual C++"两次。然后阅读"Extensions to the C Library, Part I: Bounds-checking interfaces (ISO/IEC TR 24731-1)"。后者是标准,大多数参数检查都是基于。

了解了他们的目标后,只需在项目设置中定义_CRT_SECURE_NO_DEPRECATE_SECURE_SCL_SECURE_SCL_THROWS即可。然后确保“启用C ++异常”设置为“是的SEH异常(/ EHa)”“基本运行时检查”在项目中设置为“默认”。至少,这就是我们现在正在努力的方向。确实需要一些时间来删除我们在VC6下创建的错误代码。

你可以做的最重要的事情是留出几个星期,真正深入研究各种选项和宏的作用。然后找出适用于您的代码的内容。我们没有尽早做到这一点,一旦我们有一些“糟糕的构建”使其脱离工程,它就会受到很大的伤害。