С одной стороны, хотя всем нам нравится разбивать MS на недостатки в их программном обеспечении, в IME в 99 случаях из 100 проблема заключалась не в ошибке ОС, компилятора или стандартной библиотеки, а в коде. называя это Какой бы Win API вы ни использовали - он тестируется намного тщательнее, чем большинство (если не весь) код, когда-либо использовавший его.
Далее, try
/ catch
перехватывает исключения C ++, а не исключения ОС. (Более ранние версии VC делали это неправильно, но более поздние версии имеют правильное значение по умолчанию.) Так что try
/ catch
не поймает AV. Тем не менее, VC предоставляет способы ловить исключения ОС. Я думаю, что это называется структурированной обработкой исключений и сосредоточено вокруг __try
/ __catch
, но я не уверен, так как никогда не использовал его. Однако:
Как только ваше приложение столкнулось с AV, все ставки выключены. AV - это всего лишь один из способов проявить себя неопределенным поведением, и как только вы (или код API, каким бы маловероятным он ни был) вызывали неопределенное поведение, вы ничего не можете предположить о состоянии вашего приложения. Вы не должны продолжать.
Подводя итог: вы должны попытаться выяснить, что вы сделали не так. Хороший способ сделать это - попытаться свести проблему к небольшому фрагменту примера кода, который воспроизводит проблему. В 90% всех случаев это выявит ошибку. Если хотя бы небольшой фрагмент кода воспроизвел проблему, а вы до сих пор не знаете, в чем проблема, у вас есть хороший случай для повторного воспроизведения (или для поддержки MS). IME, в 9 из этих 10% кто-то еще указывает на вашу ошибку, и только оставшиеся 1% обнаружат ошибку, которую вы не сделали сами.