Причина очень проста и указана в Документы Microsoft Статья Укажите, следует ли отлаживать только пользовательский код с помощью Just My Code в Visual Studio .Обратите внимание:
Исключительное поведение
Если в не-пользовательском коде возникает необработанное исключение, отладчик прерывается на строку в коде пользователя, где это исключение былосгенерировано.
Если для исключения включены исключения первого шанса, строка кода пользователя подсвечивается зеленым цветом.В стеке вызовов отображается аннотированный фрейм, помеченный [Внешний код].
А также это в C ++:
Исключительное поведение
Когда отладчик обнаруживает исключение, он останавливается на исключении независимо от того, находится ли он в пользовательском или не пользовательском коде.Необработанные пользователем параметры в диалоговом окне Исключения игнорируются.
Когда вы ссылаетесь на стороннюю библиотеку, она становится встроенной в ваш .pdb символ Таким образом, делая ее частьюкода.Когда вы отлаживаете «Просто мой код», отладчик знает, что он не сломается ни одним «неуправляемым кодом» вами, но сломается, когда произойдет необработанное исключение в сторонних библиотеках.
Есть способ превзойти его (см. Статью .pdb символ т.е.), вы можете указать, какой из ваших модулей будет включен в ваш файл .pdb.Это может решить вашу проблему, хотя я сам еще не проверял.
Относительно вашего утверждения:
Обычно мне приходится перезапускать Visual Studio и иногда очищать всю кэшированную отладочную информацию, которая замедляет другие вещи.
Это правдапотому что тогда визуальная студия должна снова написать символ .pdb, так что вы хороши в течение одного-двух раз, а затем возвращаетесь к нежелательному поведению.
Я предполагаю, что Microsoft хочет, чтобы вы уведомлялись о неэкранированных исключениях, даже в сторонних библиотеках, при отладке, если вы не укажете что-то другое явно, просто чтобы вы знали о проблемах в вашем коде.