Почему я получаю исключение первого шанса, если никто не вызывает функцию?

Внезапно мой код начал бросать исключение First-chance exception at 0x7731c41f in VideoPlayer.exe: Microsoft C++ exception: GenICam::RuntimeException at memory location 0x0018f5dc.. Я не мог найти, куда именно это бросает, поэтому я прокомментировал все в main функционировать и все за пределами main, Я начал раскомментировать блоки кода один за другим, пока код в main остается комментарий. Делая это, я заметил, что есть функция A что, когда он закомментирован, нет исключения, но когда он не закомментирован, он выдает исключение выше.

Я не понимаю, как это может вызвать исключение, если оно не вызывается (я поместил в него точку останова и прокомментировал код в main)?

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;
}

Поскольку вы видите только первое случайное исключение, оно будет поймано и обработано. Я видел такие конструкции на абстрактных фабриках, например, где фабрика настраивается сама.
Причиной, по которой ваша точка останова не достигнута, должно быть что-то другое.

В VS, Меню отладки, Исключения... проверьте столбец броска для соответствующего типа. Затем начните отладку, и она остановится именно там, где происходит бросок. И вы можете посмотреть почему.

Другие вопросы по тегам