Подтвердить что ты не робот

Что Visual Studio считает "User Code"?

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

Если Visual Studio решает, что сторонняя DLL не является "пользовательским кодом" (как видно на изображении ниже), то по умолчанию она будет остановлена ​​на моем исключении, хотя она будет обработана позже. Это не совсем так. он ясно объясняет, что исключение было необработанным кодом пользователя. Но что это значит, что Visual Studio вызывает некоторые DLL файлы "код пользователя", а другие нет?

enter image description here

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

4b9b3361

Ответ 1

Да, без файла .pdb отладчик не может определить, является ли он кодом пользователя или нет. Это объясняется достаточно хорошо в статье MSDN:

Чтобы отличить код пользователя от не-пользовательского кода, Just My Code рассматривает три вещи: файлы DBG, файлы PDB и оптимизацию.

В стандартной сборке Debug оптимизация отключена, и для всех модулей создаются отладочные символы. Когда вы запускаете сборку отладки, эти модули считаются кодом пользователя. Однако, если я вызываю библиотечную функцию, которая оптимизирована и не имеет символов отладки, это не код пользователя. Только мой код предотвращает выполнение остановки в точках прерывания в коде библиотеки, что обычно не является кодом, который вам интересен при отладке. В окне Breakpoints эти точки останова появятся с иконкой Disabled Breakpoint.