Временно отключить исключения первого шанса

Есть ли способ временно отключить исключения первого шанса в Visual C++?

Что-то вроде этого:

void someFunc() {
   disableFirstChanceExceptions();

   try {
     // some code
   }
   catch (std::exception& e) {
     // some code
   }
   catch (...) {
     // some code
   }

   enableFirstChanceExceptions();
}

Я знаю, что такое исключения первого шанса и как их использовать.

Проблема в том, что я распространяю DLL, в которой используются исключения.
К сожалению, если заказчик использует отладчик со своей программой, он заметит мои внутренние исключения.
Это не то, что я хочу скрыть их, я больше хочу избавиться от этих вопросов поддержки.


person ConfusedSushi    schedule 22.03.2012    source источник
comment
Скажите клиенту игнорировать исключения в вашем внутреннем коде.   -  person nothrow    schedule 22.03.2012
comment
Это то, чем я сейчас занимаюсь, но я больше не хочу тратить на это время.   -  person ConfusedSushi    schedule 22.03.2012
comment
Для пользы тех пользователей, которые раньше не встречались с этим термином, вы должны объяснить, что такое исключения первого шанса, или предоставить ссылку.   -  person David Rodríguez - dribeas    schedule 22.03.2012


Ответы (2)


  • Ваш код генерирует исключения.
  • Ваши клиенты настаивают на запуске отладчиков вашего кода и явно и настраивают его так, чтобы он прерывал работу при возникновении исключений первого шанса.

У вас есть в основном два варианта:

  • не генерировать исключения или
  • игнорировать, когда ваш клиент ведет себя глупо. Что ваш код делает внутри, их не касается, до тех пор, пока он работает так, как задумано.

Я бы предложил последнее. Если у них возникнут проблемы с созданием и перехватом исключений внутри стороннего кода, они не смогут использовать множество библиотек. Им нужно повзрослеть и начать вести себя так, будто они знают, что делают.

person jalf    schedule 22.03.2012

Исключения первого шанса - это не то, что можно включать и выключать в вашем коде (говоря только о цепочке windows, vs, c++, не знакомой с другими платформами). Эта конструкция встроена в систему времени выполнения, чтобы сделать возможной отладку. Отладчик можно настроить так, чтобы он игнорировал некоторые или все исключения первого шанса. Вы можете использовать ctrl + alt + e, чтобы вызвать меню поведения обработки исключений отладчика VS. Это позволит отладчику клиентов фильтровать то, что хочет отладчик.

person Unknown1987    schedule 22.03.2012
comment
Я знаю об этом. Я также знаю о том, что я настраиваю свой отладчик, чтобы игнорировать их, но я не могу настроить отладчики своих клиентов. Я надеялся, что существует что-то вроде msdn.microsoft .com/en-us/library/xcb2z8hs%28v=vs.100%29.aspx, который также является функцией отладчика. - person ConfusedSushi; 22.03.2012
comment
ЕСЛИ ваши клиенты используют отладчик, не зная, как им пользоваться, я не думаю, что вы сможете выиграть. - person jalf; 22.03.2012
comment
Похоже, ваши клиенты видят ваше внутреннее использование исключений, даже если исключение правильно обрабатывается вашей библиотекой. Как я уже сказал, исключения первого шанса нельзя отключить — это функция отладчика. Попросите своих клиентов узнать, как отключить определенные исключения первого шанса. - person Unknown1987; 16.03.2014