如果没有人调用该函数,为什么我会获得第一次机会异常?

时间:2013-06-02 14:53:31

标签: c++ visual-studio-2008 exception first-chance-exception

突然间,我的代码开始抛出异常First-chance exception at 0x7731c41f in VideoPlayer.exe: Microsoft C++ exception: GenICam::RuntimeException at memory location 0x0018f5dc..我无法找到它的确切位置,因此我在main函数和main之外的所有内容中进行了评论。我开始逐个取消注释代码块,而main中的代码仍然是注释。在执行此操作时,我注意到有函数A,当它被注释时没有异常,但是当它被取消注释时会抛出上面的异常。

我不明白如果没有调用它会如何导致exeception(我在其中放置了断点并且在main中的代码被注释)?

2 个答案:

答案 0 :(得分:2)

在静态初始化期间将使用您的函数。 请看以下示例:

#include <iostream>
bool static_func()
{
    std::cout << "Before main" << std::endl;
    return true;
}
static const bool b = static_func();
int main()
{
    std::cout << "We are main" << std::endl;
    return 0;
}

由于您只看到第一次机会异常,因此会被捕获并处理。我在抽象工厂中看到过这样的构造,例如工厂自行配置 断点未被击中的原因必须是其他原因。

答案 1 :(得分:0)

在VS,Debug菜单中,Exceptions ...检查匹配类型的throw列。然后开始调试,它将准确停止抛出的位置。你可以看看为什么。