【发布时间】:2010-12-22 09:55:34
【问题描述】:
如何在 Visual Studio 2008 C++ 中捕获除零错误(而不是其他错误;并且能够访问异常信息)?
我试过了:
try {
int j=0;
int i= 1/j;//actually, we call a DLL here, which has divide-by-zero
} catch(std::exception& e){
printf("%s %s\n", e.what());
} catch(...){
printf("generic exception");
}
但这是通用的 ... catch 块。我知道特定于 MS 的 __try 在这里可能很有用,但我更喜欢标准 C++,而且无论如何我都有析构函数阻止使用 __try。
澄清:为了讨论目的,上面的代码被简化了。实际上,被零除是一个错误,它发生在我没有源代码的第三方 DLL 中。该错误取决于我传递给库的参数(复杂结构的句柄),但不是以任何明显的方式。所以,我希望能够优雅地恢复。
【问题讨论】:
-
"我更喜欢标准 C++" 那么你必须不希望除以零,因为这是未定义的行为。它是特定于平台的,它根本就抛出一个异常,所以如果捕获它的方法也是特定于平台的,那也不是什么大问题。在不被零除的平台上,您无法从 dll 中的此错误中恢复,因此您不需要独立于平台的恢复方式。
-
@Steve Jessop 在实际示例中,除以零在我没有源代码的 DLL 中很深。
标签: c++ exception visual-studio-2008 try-catch