Почему я получаю исключение первого шанса, если никто не вызывает функцию?
Внезапно мой код начал бросать исключение 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, Меню отладки, Исключения... проверьте столбец броска для соответствующего типа. Затем начните отладку, и она остановится именно там, где происходит бросок. И вы можете посмотреть почему.