Почему отладка включает код внешней библиотеки - PullRequest
0 голосов
/ 20 октября 2018

Это было всегда, но мне интересно, нашел ли кто-нибудь решение ...

Иногда я отключаю «Just My Code» (в наши дни в сочетании с включением SourceLink) и включаю «Break»Когда выброшено "для всех" Общих исключений времени исполнения "в Visual Studio, потому что я хочу проверить наличие ошибок, которые исключаются проглатыванием сторонней библиотекой.

После того, как я закончу и повторно включу" Просто мой код "«И оставив« Break When Throw »для всех« Common Language Runtime Exceptions »включенным, я иногда ОСТАЮСЬ сломаюсь, когда сторонние библиотеки генерируют HANDLED исключения.Это означает, что у сторонней библиотеки есть тихое исключение, которое я не хочу видеть, но Visual Studio все равно ломается.Например, у библиотеки может быть ожидаемое время ожидания соединения TCP, но Visual Studio все равно прерывается.Я ожидаю, что это произойдет, только когда мой код отключен.

Обычно мне приходится перезапускать Visual Studio и иногда очищать всю кэшированную отладочную информацию, которая замедляет другие действия.

Кто-нибудь нашелспособ обойти это?

ОБНОВЛЕНИЕ: см. скриншот, демонстрирующий неожиданное поведение.Включен «Только мой код», установлен флажок «Разбрасывать при сбросе», и в любом случае появляется обработанное исключение в стороннем коде.Если я перезагружаю Visual Studio (а иногда и очищаю кеш), я перестаю получать подсказки, используя те же настройки.Похоже, что-то заставляет эту внешнюю библиотеку считаться «Моим кодом» даже после того, как я отключил ссылку на источник.

enter image description here

Спасибо.

1 Ответ

0 голосов
/ 21 октября 2018

Причина очень проста и указана в Документы Microsoft Статья Укажите, следует ли отлаживать только пользовательский код с помощью Just My Code в Visual Studio .Обратите внимание:

Исключительное поведение

Если в не-пользовательском коде возникает необработанное исключение, отладчик прерывается на строку в коде пользователя, где это исключение былосгенерировано.

Если для исключения включены исключения первого шанса, строка кода пользователя подсвечивается зеленым цветом.В стеке вызовов отображается аннотированный фрейм, помеченный [Внешний код].

А также это в C ++:

Исключительное поведение

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

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

Есть способ превзойти его (см. Статью .pdb символ т.е.), вы можете указать, какой из ваших модулей будет включен в ваш файл .pdb.Это может решить вашу проблему, хотя я сам еще не проверял.

Относительно вашего утверждения:

Обычно мне приходится перезапускать Visual Studio и иногда очищать всю кэшированную отладочную информацию, которая замедляет другие вещи.

Это правдапотому что тогда визуальная студия должна снова написать символ .pdb, так что вы хороши в течение одного-двух раз, а затем возвращаетесь к нежелательному поведению.

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

...