Загрузка символа Visual Studio, как отключить

Обновлено: 03.07.2024

С помощью ReSharper вы можете отлаживать любой скомпилированный модуль, даже если он не содержит отладочной информации (PDB). ReSharper декомпилирует модуль, сгенерирует для него PDB и автоматически загрузит декомпилированные символы для этого модуля в отладчик Visual Studio.

Вы можете использовать функции навигации ReSharper, такие как «Искать везде» Control+N и «Перейти к объявлению Control+B», чтобы найти типы и члены в декомпилированном коде и установить там точки останова.

Предпосылки

Перед отладкой модулей, не имеющих PDB, проверьте следующие настройки:

ReSharper: о ReSharper | Опции | Окружающая среда | На странице параметров "Продукты и возможности" убедитесь, что установлен флажок "Интеграция с отладчиком".

Visual Studio: в меню "Инструменты" | Опции | Отладка | На странице параметров символов убедитесь, что символ кэша в этом поле каталога имеет допустимое значение пути к диску.

Visual Studio: в меню "Инструменты" | Опции | Отладка | На странице "Общие параметры" убедитесь, что флажок "Включить только мой код" снят.

Однако, даже если один или оба этих параметра не имеют ожидаемых значений, ReSharper автоматически предложит исправить эти значения, когда вы попытаетесь загрузить символы из декомпилированных модулей. В этом случае он добавит %LOCALAPPDATA%\Temp\SymbolCache в качестве каталога кэша символов.

Отладка

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

В режиме отладки откройте окно модулей Visual Studio ( Отладка | Windows | Модули ), выберите один из нескольких модулей, щелкните правой кнопкой мыши выбранный элемент и выберите Загрузить символы с помощью декомпилятора ReSharper .

В окне Process Explorer ( ReSharper | Windows | Process Explorer ) выберите один из нескольких управляемых модулей или один или несколько процессов и выберите «Включить отладку» в контекстном меню. Если вы выберете процессы, ReSharper сгенерирует и загрузит несуществующие PDB для всех управляемых модулей в процессах.

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

Декомпиляция и загрузка символов может занять некоторое время, поэтому после того, как вы инициируете процесс одним из указанных выше способов, ReSharper отобразит ход выполнения в окне «Статус создания проекта/PDB».

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

Проверьте, оптимизирована ли сборка, когда Visual Studio находится в режиме отладки — откройте окно «Модули» ( Debug | Windows | Modules ) и проверьте столбец «Оптимизировано».

Установите флажок Подавлять JIT-оптимизацию при загрузке модуля в параметрах Visual Studio ( Инструменты | Параметры | Отладка | Общие ).

Чтобы отключить использование всех образов NGEN (pre-JIT) ( *.ni.dll ), можно установить переменную среды COMPLUS_ZapDisable=1 . В этих статьях приведены примеры и дополнительная информация:

Возможные проблемы

Если сборка была построена без каталога отладки, отладчик Visual Studio не сможет сопоставлять символы в сборке, даже если PDB создается повторно.

Например, такие сборки могут быть созданы в Visual Studio, если в свойствах проекта ( Сборка | Дополнительно | Информация об отладке ) выбрано значение Нет , что означает, что для сборки не будут созданы ни PDB, ни каталог отладки.

Если вы попытаетесь отладить такую ​​сборку, об этой проблеме будет сообщено в окне состояния создания PDB.

Хотя такую ​​сборку нельзя отлаживать с помощью ReSharper в Visual Studio, вы сможете отлаживать ее с помощью JetBrains Rider.

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

При сборке проекта из интегрированной среды разработки Visual Studio со стандартной конфигурацией сборки отладки компилятор создает соответствующие файлы символов. В этой статье описывается, как управлять файлами символов в среде IDE, например:

Для получения подробной информации о файлах символов см. следующее:

Как работают файлы символов

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

  • Имя исходного файла и номер строки для отображения в интегрированной среде разработки Visual Studio.
  • Где в приложении остановиться для точки останова.

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

Отладчик загружает только те файлы .pdb, которые точно соответствуют файлам .pdb, созданным при сборке приложения (то есть исходному .pdb файлы или копии). Это точное дублирование необходимо, потому что макет приложений может измениться, даже если сам код не изменился. Дополнительные сведения см. в разделе Почему Visual Studio требует, чтобы файлы символов отладчика точно соответствовали двоичным файлам, с помощью которых они были созданы?

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

Где отладчик ищет символы

При отладке проекта в интегрированной среде разработки Visual Studio отладчик автоматически загружает файлы символов, которые он может найти по умолчанию.

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

Отладчик ищет файлы символов в следующих местах:

Папка проекта.

Расположение, указанное внутри библиотеки DLL или исполняемого файла (.exe).

По умолчанию, если вы создали DLL или файл .exe на своем компьютере, компоновщик помещает полный путь и имя связанного файла .pdb в файл DLL или .exe. Отладчик проверяет, существует ли файл символов в этом месте.

Та же папка, что и файл DLL или .exe.

Любые местоположения, указанные в параметрах отладчика для файлов символов. Сведения о добавлении и включении местоположений символов см. в разделе Настройка местоположений символов и параметров загрузки.

Любая локальная папка кэша символов.

Указанные сетевые, интернет- или локальные серверы символов и местоположения, например серверы символов Microsoft, если они выбраны. Visual Studio может загружать файлы символов отладки с серверов символов, реализующих протокол symsrv. Visual Studio Team Foundation Server и средства отладки для Windows — это два инструмента, которые могут использовать серверы символов.

Серверы символов, которые вы можете использовать, включают:

Серверы символов во внутренней сети или на вашем локальном компьютере: ваша команда или компания могут создавать серверы символов для собственных продуктов и в качестве кэша для символов из внешних источников. У вас может быть сервер символов на вашем собственном компьютере.

Сторонние серверы символов. Сторонние поставщики приложений и библиотек для Windows могут предоставлять доступ к серверу символов через Интернет.

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

Настроить расположение файлов символов и параметры загрузки

По умолчанию отладчик проверяет наличие символов в различных местах. См. раздел Где отладчик ищет символы.

На странице Инструменты > Параметры > Отладка > Символы вы можете:

  • Укажите и выберите пути поиска файлов символов.
  • Укажите серверы символов для компонентов Microsoft, Windows или сторонних производителей.
  • Укажите модули, для которых вы хотите или не хотите, чтобы отладчик автоматически загружал символы.
  • Изменяйте эти параметры во время активной отладки. См. раздел Загрузка символов во время отладки.

Чтобы указать расположение символов и параметры загрузки:

В Visual Studio откройте Инструменты > Параметры > Отладка > Символы (или Отладка > Параметры > Символы).

В разделе Расположение файлов символов (.pdb)

Чтобы добавить новое местоположение сервера символов,

 Страница Инструменты - Параметры - Отладка - Символы

Выполняется поиск только в указанной папке. Вы должны добавить записи для всех подпапок, в которых вы хотите искать.

Чтобы добавить новое местоположение сервера символов VSTS,

Чтобы изменить порядок загрузки символов, используйте Ctrl+Up и Ctrl+Down или значки со стрелками вверх и вниз.

Чтобы изменить URL-адрес или путь, дважды щелкните запись или выберите ее и нажмите F2.

Чтобы удалить запись, выберите ее, а затем выберите значок -.

(Необязательно) Чтобы повысить производительность загрузки символов, в разделе Кэшировать символы в этом каталоге введите путь к локальной папке, в которую серверы символов могут копировать символы.

Не помещайте локальный кэш символов в защищенную папку, например C:\Windows, или во вложенную папку. Вместо этого используйте папку для чтения и записи.

Для проектов C++, если у вас установлена ​​переменная среды _NT_SYMBOL_PATH, она переопределит значение, установленное в символах кэша в этом каталоге.

Укажите модули, которые вы хотите, чтобы отладчик загружал из файлов символов (.pdb) при запуске.

Выберите Загрузить все модули, если они не исключены (по умолчанию), чтобы загрузить все символы для всех модулей в местоположении файла символов, за исключением специально исключенных модулей. Чтобы исключить определенные модули, выберите Указать исключенные модули, выберите значок +, введите имена исключаемых модулей и нажмите кнопку ОК.

Чтобы загружать только указанные вами модули из расположений файлов символов, выберите Загружать только указанные модули. Выберите Указать включенные модули, щелкните значок +, введите имена модулей, которые необходимо включить, а затем нажмите кнопку ОК. Файлы символов для других модулей не загружены.

Выберите ОК.

Другие варианты символов для отладки

Вы можете выбрать дополнительные параметры символа в Инструменты > Параметры > Отладка > Общие (или Отладка > Параметры > Общие):

Загрузить экспорт DLL (только собственный)

Загружает таблицы экспорта DLL для C/C++. Дополнительные сведения см. в разделе Таблицы экспорта DLL. Чтение информации об экспорте DLL связано с некоторыми накладными расходами, поэтому загрузка экспортных таблиц по умолчанию отключена. Вы также можете использовать dumpbin /exports в командной строке сборки C/C++.

Включить отладку на уровне адреса и Показать дизассемблирование, если исходный код недоступен

Всегда показывает разборку, если исходные файлы или файлы символов не найдены.

 Параметры/Отладка/Общие параметры дизассемблирования

Включить поддержку исходного сервера

Использует исходный сервер для отладки приложения, если на локальном компьютере нет исходного кода или файл .pdb не соответствует исходному коду. Исходный сервер принимает запросы на файлы и возвращает фактические файлы из системы управления версиями. Исходный сервер запускается с помощью библиотеки DLL с именем srcsrv.dll для чтения файла .pdb приложения. Файл .pdb содержит указатели на репозиторий исходного кода, а также команды, используемые для извлечения исходного кода из репозитория.

Вы можете ограничить команды, которые srcsrv.dll может выполнять из файла приложения .pdb, перечислив разрешенные команды в файле с именем srcsrv.ini< /эм>. Поместите файл srcsrv.ini в ту же папку, что и srcsrv.dll и devenv.exe.

Произвольные команды могут быть встроены в файл .pdb приложения, поэтому обязательно поместите в файл srcsrv.ini только те команды, которые вы хотите выполнить. Любая попытка выполнить команду, отсутствующую в файле srcsvr.ini, приведет к появлению диалогового окна подтверждения. Дополнительные сведения см. в разделе Предупреждение системы безопасности: отладчик должен выполнить ненадежную команду.

Проверка параметров команды не выполняется, поэтому будьте осторожны с доверенными командами. Например, если вы указали cmd.exe в файле srcsrv.ini, злоумышленник может указать параметры cmd.exe, которые сделают его опасно.

Выберите этот элемент и нужные дочерние элементы. Разрешить исходному серверу сборки с частичным доверием (только для управляемых) и всегда выполнять команды ненадежного исходного сервера без запроса могут увеличить риски безопасности.

 Включить параметры исходного сервера

Параметры символа компилятора

При сборке проекта из интегрированной среды разработки Visual Studio со стандартной конфигурацией сборки отладки C++ и управляемые компиляторы создают соответствующие файлы символов для вашего кода. Вы также можете установить параметры компилятора в коде.

Чтобы задать параметры компилятора для конфигураций сборки в Visual Studio, см. статью Установка конфигураций отладки и выпуска.

Параметры C/C++

Файл .pdb для C/C++ создается при сборке с использованием /ZI или /Zi. В Visual C++ параметр /Fd присваивает имя файлу .pdb, который создает компилятор. Когда вы создаете проект в Visual Studio с помощью IDE, параметр /Fd устанавливается для создания файла .pdb с именем

Если вы создаете приложение C/C++ с помощью make-файла и указываете /ZI или /Zi без использования /Fd, компилятор создает два файла .pdb:

VC .pdb, где представляет версию компилятора Microsoft C++, например VC11.pdb

В файле VC .pdb хранится вся отладочная информация для отдельных объектных файлов, и он находится в том же каталоге, что и make-файл проекта. Каждый раз при создании объектного файла компилятор C/C++ объединяет отладочную информацию с файлом VC .pdb. Таким образом, даже если каждый исходный файл включает общие файлы заголовков, такие как , определения типов из этих заголовков сохраняются только один раз, а не в каждом объектном файле. Вставленная информация включает информацию о типе, но не включает информацию о символах, такую ​​как определения функций.

В файле

.pdb хранится вся отладочная информация для файла .exe проекта, и он находится в подкаталоге \debug.

<р>.pdb
содержит полную информацию об отладке, включая прототипы функций, а не только информацию о типе, найденную в VC .pdb.

Как VC .pdb, так и

Файлы

.pdb допускают добавочные обновления. Компоновщик также встраивает путь к файлам .pdb в создаваемый им файл .exe или .dll.

Таблицы экспорта DLL

Используйте команду dumpbin /exports, чтобы просмотреть символы, доступные в таблице экспорта библиотеки DLL. Символическая информация из таблиц экспорта DLL может быть полезна для работы с сообщениями Windows, процедурами Windows (WindowProcs), COM-объектами, маршалингом или любой библиотекой DLL, для которой у вас нет символов. Символы доступны для любой 32-битной системной DLL. Вызовы перечислены в порядке вызова, при этом текущая функция (наиболее глубоко вложенная) находится вверху.

Прочитав выходные данные dumpbin /exports, можно увидеть точные имена функций, включая небуквенно-цифровые символы. Просмотр точных имен функций полезен для установки точки останова для функции, поскольку имена функций могут быть усечены в другом месте отладчика. Дополнительные сведения см. в разделе dumpbin/exports.

Веб-приложения

Загружать символы во время отладки

Вы можете использовать модули, стек вызовов, локальные, автоматические или любое окно просмотра для загрузки символов или изменения параметров символов во время отладки. Дополнительные сведения см. в статье Знакомство с тем, как отладчик подключается к вашему приложению.

Работа с символами в окне "Модули"

Во время отладки в окне "Модули" отображаются модули кода, которые отладчик обрабатывает как код пользователя или "Мой код", а также статус загрузки их символов. Вы также можете отслеживать статус загрузки символов, загружать символы и изменять параметры символов в окне «Модули».

Чтобы отслеживать или изменять расположение или параметры символов во время отладки:

  1. Чтобы открыть окно "Модули", во время отладки выберите "Отладка" > "Окна" > "Модули" (или нажмите Ctrl + Alt + U).
  2. В окне "Модули" щелкните правой кнопкой мыши заголовки "Статус символа" или "Файл символов" или любой модуль.
  3. В контекстном меню выберите один из следующих вариантов:

Использование страниц без загрузки символов/без загрузки исходного кода

Существует несколько способов, с помощью которых отладчик может проникнуть в код, в котором отсутствуют символы или исходные файлы:

  • Перейти к коду.
  • Взлом в код из точки останова или исключения.
  • Переключиться на другую цепочку.
  • Измените фрейм стека, дважды щелкнув фрейм в окне стека вызовов.

В этом случае отладчик отображает страницы Нет загруженных символов или Исходный код не загружен, чтобы помочь вам найти и загрузить необходимые символы или источник.

Страница без символов

Чтобы использовать страницу документа "Нет символов загружено" для поиска и загрузки отсутствующих символов:

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

Чтобы добавить пути поиска исходных файлов в решение:

Вы можете указать места, в которых отладчик ищет исходные файлы, и исключить определенные файлы из поиска.

Выберите решение в обозревателе решений, а затем выберите значок "Свойства", нажмите клавиши ALT+ВВОД или щелкните правой кнопкой мыши и выберите "Свойства".

Выберите исходные файлы отладки.

Страница исходных файлов отладки

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

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

В разделе Не искать эти исходные файлы введите имена исходных файлов, которые нужно исключить из поиска.

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

Но если вы привыкли отлаживать аварийные дампы для программного обеспечения, которое было выпущено в дикой природе, подключая отладчик к удаленным процессам, выполняющим развертывание, созданное CI, или использовали другие, более ручные системы отладки, такие как gdb или WinDbg, тогда вы гораздо лучше поймете, что отладчик должен загружать правильные символы, чтобы он мог понять все двоичные данные, из которых состоит работающая (или, скорее всего, аварийно завершающая) программа.

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

А если нет? Что делать, если вы столкнулись с ужасным экраном «Символы не загружены»? И почему, когда вы указываете Visual Studio на dll или pdb, которые, как вы уверены, нужны, он отказывается их загружать? Что ж, давайте приоткроем завесу и посмотрим, как работает магия загрузки символов и отладки аварийного дампа.

Для этого глубокого погружения я буду использовать Hex Editor Neo Free, хотя вы можете использовать другие инструменты, такие как CFF Explorer или любой другой шестнадцатеричный редактор или PE Explorer, чтобы сделать то же самое. Кроме того, я должен отдать должное этому сообщению Олега Стародумова, которое помогло мне расшифровать многое из того, что отсутствует в официальной документации.

Шаг 1. Поиск подходящего модуля

Это изображение имеет пустой атрибут alt; его имя файла: First-picutre-Joes-tech-blog.jpg

Что происходит, когда вы получаете минидамп, загружаете его в Visual Studio и начинаете отладку? При отладке полного дампа памяти или при подключении к работающему процессу Visual Studio может напрямую проверять загруженные модули (исполняемый исполняемый файл и любые загруженные библиотеки DLL). В минидампе сохраняется только имя модуля и дополнительная информация в структуре MINIDUMP_MODULE. Visual Studio извлекает имя, метку времени и размер изображения и будет использовать все три, чтобы попытаться найти правильный модуль в хранилище символов. Он также будет использовать эту информацию для проверки любого модуля перед его загрузкой.

Давайте загрузим файл dmp и самостоятельно найдем эти данные, чтобы попытаться отладить неудачную загрузку (если вы хотите попробовать и у вас нет под рукой минидампа, вы можете создать его, щелкнув правой кнопкой мыши любой процесс в на панели «Сведения» диспетчера задач и выбрав в меню «Создать файл дампа»). Используя Hex Editor Neo, сделайте следующее:

VS использует конкатенацию TimeDateStamp и SizeOfImage в качестве уникального ключа для поиска в хранилище символов, а затем проверяет оба этих значения в любом двоичном модуле, который пытается загрузить. Это первая часть проверки того, что VS не загружает неправильные символы для сеанса отладки.

Шаг 2. Загрузка модуля

Теперь мы можем посмотреть, где Visual Studio ожидает найти двоичный модуль, который она пытается загрузить. Перейдите в хранилище символов (место, где ваша сборка CI выдает символы) и найдите подкаталог с именем модуля, который вы ищете — в нашем случае это папка с именем d3d11.dll. Если у вас нет хранилища символов для просмотра, вы можете посмотреть в своем локальном кэше символов, который обычно находится в %LOCALAPPDATA%\Temp\SymbolCache, поскольку он хранит кэшированные символы и двоичные файлы в том же формате. В папке d3d11.dll мы видим несколько папок с шестнадцатеричными значениями в качестве имен. Мы ищем то, которое является конкатенацией двух значений, которые мы нашли ранее: TimeDateStamp и SizeOfImage (обратите внимание, что для SizeOfImage наименее значащий байт опущен). В нашем случае это дает нам FECB8D5ED03600, и мы видим, что там есть нужная нам папка.

Это изображение имеет пустой атрибут alt; его имя файла - untitled-1.jpg

Когда эта папка отсутствует, Visual Studio запрашивает расположение двоичного файла. Теперь мы можем открыть модуль и найти совпадающую информацию внутри двоичного файла, что Visual Studio использует для проверки того, что он действительно нашел правильный двоичный модуль. Именно невыполнение этого шага приводит к наибольшей нервотрепке, когда вы указываете Visual Studio на файл, который, по вашему мнению, ему нужен, а он просто отказывается его загружать! По крайней мере, теперь вы будете знать, почему он не загружается (и если вы действительно хотите заставить его загрузиться, то вы будете знать, какой фрагмент файла нужно отредактировать, чтобы заставить его загрузиться)!

Если вам интересно, откуда берутся все эти папки, они создаются с помощью инструмента под названием SymStore, который можно запустить непосредственно из сборки CI или из задачи PublishSymbols в TFS/Azure DevOps. Дополнительную информацию смотрите в конце этого поста.

Мы снова открываем файл в HexEditorNeo, но на этот раз вместо того, чтобы смотреть на необработанный шестнадцатеричный код, мы можем использовать панель просмотра структуры (возможно, вам придется включить расширенный режим, чтобы увидеть это), чтобы изучить заголовки PE. Вы также можете использовать другой инструмент, такой как CFF Explorer, чтобы сделать это. Теперь мы просто переходим к dos_header → e_lfanew → FileHeader → TimeDateStamp, чтобы прочитать значение TimeDateStamp. Нажав на нее, мы попадем в соответствующее место в шестнадцатеричном редакторе, что позволит нам легко проверить соответствие шестнадцатеричного значения.

Это изображение имеет пустой атрибут alt; его имя файла - untitled-4-1024x715.jpg

Затем мы переходим к dos_header → e_lfanew → OptionalHeaderSelector → OptionalHeader → SizeOfImage, чтобы прочитать значение SizeOfImage. Снова щелкнув по нему, мы перейдем к соответствующей части двоичного файла, чтобы мы могли напрямую сравнить шестнадцатеричные значения и проверить совпадение.

Это изображение имеет пустой атрибут alt; его имя файла без названия-5-1024x711.jpg

Если вы были вынуждены пересобрать модуль, чтобы он соответствовал историческому аварийному дампу, это значение должно совпадать, а отметка времени будет другой. Просто измените TimeDateStamp во вновь созданном двоичном файле, чтобы он соответствовал ожидаемому значению (или отредактируйте файл дампа, чтобы он соответствовал вновь созданному модулю), и Visual Studio загрузит ваш новый двоичный файл, а затем извлечет вновь созданные символы!< /p>

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

Шаг 3. Поиск подходящего pdb

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

Снова мы можем использовать вкладку Просмотр структуры или другой обозреватель структуры PE, чтобы исследовать DebugDirectory, и теперь мы ищем хранящиеся там необработанные данные. Итак, мы переходим к DebugDirectory → AddressOfRawData → Data → data и нажимаем на него, чтобы перейти в соответствующее место в главном шестнадцатеричном редакторе. Мы видим, что этот раздел начинается с волшебной строки «RSDS», за которой следуют 16 байтов GUID, за которыми следует значение возраста (обычно «1») в виде uint32 и, наконец, исходный путь к файлу символов. Запишите эти значения, и теперь мы можем использовать их для загрузки правильных символов! В этом примере байты: F82BEBBA3FFA9C4D84643895BFA0295E для GUID и 01000000 для возраста.

Это изображение имеет пустой атрибут alt; его имя файла Joe-blog-im--1024x720.jpg

Шаг 4. Загрузка правильных символов

Если вы отлаживаете процесс на машине, на которой был создан двоичный файл, все немного проще, поскольку мы только что нашли путь, ведущий непосредственно к файлам символов для загрузки! Но что, если бинарный файл был собран на другой машине, скажем, на CI-сервере? Что ж, опять Visual Studio обратится к хранилищу символов.

Это изображение имеет пустой атрибут alt; его имя файла - Image-8.jpg

Это изображение имеет пустой атрибут alt; его имя файла IMage-9-.jpg

Бьюсь об заклад, вам интересно, загрузит ли Visual Studio эти символы вслепую или сначала подтвердит, что они действительно являются правильными символами для запущенного процесса. Вы, конечно, правы — есть последний шаг проверки, прежде чем Visual Studio действительно будет использовать символы, которые она только что нашла (или, если оба вышеуказанных поиска дадут пустое место, файл символов, который вы только что попросили загрузить из файла диалог).Visual Studio подтверждает, что это правильные символы, ища GUID внутри самого файла PDB. Судя по моим беглым исследованиям, он хранится в файле по смещению 0x0000500C с возрастом 0x00005008. Однако достаточно просто использовать шестнадцатеричный редактор и найти весь набор байтов, составляющих GUID (в данном случае F82BEBBA3FFA9C4D84643895BFA0295E). Если он нигде в файле не совпадает, то это точно не те символы!

Заключение и дополнительная литература

Вот как Visual Studio делает свое волшебство и сопоставляет символы с минидампом. Будем надеяться, что теперь, если один из этих шагов не сработает (из-за поврежденного файла, сбоя хранилища символов или каких-либо других махинаций с CI), вам будет чем заняться при попытке диагностировать проблему!

Для получения дополнительной информации об индексации исходного кода и символах серверов прочитайте эту статью на CodeProject

Асинхронное меню смарт-тегов В этом выпуске CodeRush загружает меню смарт-тегов асинхронно, чтобы уменьшить его. Для этого попробуйте получить доступ к следующему URL-адресу через веб-браузер:. Рекомендуемые расширения Visual Studio 2010 Newbedev. Здорово, что 133 символа создаются всего за пару кликов.

Чтобы включить загрузку символов Microsoft из Visual Studio: в разделе Visual Studio/Инструменты/Параметры/ снимите флажок Серверы символов Microsoft, чтобы pdb был для Microsoft.

Кроме того, после очистки NVRAM следующая загрузка будет в порядке. Судя по ответам на форуме, это известная проблема Apple, но не обновление программного обеспечения или замена оборудования.

Фан-моды для исправления ошибок Fallout 4. Это гарантирует, что консоль выключится. Я пробовал Bluestacks и некоторые другие, но не добился большого успеха, пока не попробовал.

VS забывает о Afshin.dll. Он не отображается в окне модулей. Символы не загружать. Однако DLL определенно загружается, как видно из разных процессов.

Поэтому DevPartner попытается получить их с сервера Microsoft Symbol. Это занимает много времени, и эта загрузка происходит так же, как и Microsoft.dll.

1 Отключите или приостановите использование C/C++ Intellisense по умолчанию. 2 Если вы используете Visual Studio 2010 или более позднюю версию, ограничьте загрузку символов отладки указанными.

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

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

Дополнительную информацию о браузере символов см. в Разделе 5.2.10. Теперь вы должны были успешно создать сборку, загрузить и отладить свой первый Code Composer.

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

Очень расстраивает невозможность найти его, и у него нет строки заголовка, поэтому я не могу использовать AltTab или что-то подобное. ИМО двойной щелчок по главному.

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

Поэтому теперь я пытаюсь загружать символы только тогда, когда они мне нужны. Я использую функцию Как такая задача, как VIsual C++, определяет, содержит ли DLL или нет

VS 2017 иногда зависает при загрузке символов и никогда не закрывается. Аватар Джейсона Белэра Windows 10.0visual studio 2017 версии 15.1 отладчика. Посмотреть хронологию по.

Хватит загружать символы, как в 1987 году. Предоставьте дополнительную информацию, записав шаги воспроизведения с помощью инструмента обратной связи Visual Studio Справка > Отправить.

Однако файлы pdb для библиотек Microsoft по умолчанию не загружаются в Visual Studio. Поэтому DevPartner попытается извлечь их из.

В Visual Studio в меню выберите Dynamics 365>Параметры. Разверните узел Dynamics 365 и выберите узел Отладка. На правой панели найдите.

отладчик windows 10.0visual studio 2017 версии 15.1. Посмотреть временную шкалу по. Все сообщения 9 >Попытка отмены приведет к отключению дальнейшей загрузки символа.

На странице "Проекты и решение" > "Общие" снимите флажок "Повторно открывать документы при загрузке решения". Если отключить автоматическое восстановление файлов, быстрый способ.

Для этого документа не загружены символы. Перейдите в окно «Модули» «Отладка» > «Окна» > «Модули» и проверьте, загружен ли ваш модуль.

У меня есть Visual Studio 2005, настроенная на использование серверов символов Microsoft. У меня также установлен UltraMon, который внедряет DLL-ловушку в каждый процесс.

У меня есть Visual Studio 2005, настроенная на использование серверов символов Microsoft. У меня также установлен UltraMon, который внедряет DLL-ловушку в каждый процесс.

У меня есть Visual Studio 2005, настроенная на использование серверов символов Microsoft. У меня также установлен UltraMon, который внедряет DLL-ловушку в каждый процесс.

modules я вижу, что символы не были загружены для ntdll.dll.Аварийный дамп Symbol в отладчике или самодельный способ сохранения нескольких версий

Привет, ребята, у меня есть VS 2015 с ReSharper. Это диалоговое окно появляется в середине моего экрана каждые несколько минут: Какова цель

Расположение файлов символов и поведение при загрузке. При отладке проекта в интегрированной среде разработки Visual Studio отладчик автоматически загружает файлы символов.

Расположение файлов символов и поведение при загрузке. При отладке проекта в интегрированной среде разработки Visual Studio отладчик автоматически загружает файлы символов.

Включить фильтры точек останова: позволяет установить фильтры для точек останова, чтобы они влияли только на определенные потоки процессов или компьютеры.

dll и выберите «Загрузить символы». Это загрузит символы для сборки System.Windows.Forms, которые составляют около 10 мегабайт, поэтому скорость.

Вы пытаетесь загрузиться в обычном режиме, но ваш Mac или MacBook не включается или зависает на экране загрузки, индикаторе загрузки или Apple.

Для этого документа не загружены символы. Перейдите в окно «Модули» «Отладка» > «Окна» > «Модули» и проверьте, есть ли у вас модуль.

ReSharper декомпилирует модуль, сгенерирует для него PDB и автоматически загрузит декомпилированные символы для этого модуля в Visual Studio.

Как я могу остановить попытки VS загрузить для них символы отладки? Во-вторых, если вы знаете, что это за модули и почему они имеют динамические имена?

В контекстном меню модуля в окне «Модули» щелкните Информация о загрузке символов. чтобы увидеть, куда отладчик пытался загрузиться.

Visual Studio попытается загрузить символы для всех двоичных файлов, указанных в настройках My Code, чтобы отладчик не смог загрузить файл символов.

Отладка > Символы > Все местоположения файлов символов не отмечены. Теги: Загрузка для отладки Visual Studio. Связанный. Как установить.

Загружен '/lib64/ldlinuxx8664.so.2'. Символы загружены. [Низший процесс 1 14069 завершился с кодом 0177] Программа '/home/rytis/Desktop.

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

Как запретить Visual Studio загружать символы? Я отлаживаю созданную мной DLL, которая поддерживает графический интерфейс. Через Visual Studio я запускаю

Visual Studio поддерживает динамическую загрузку символов. Для этого необходимо отключить параметр «Включить только мой код» в разделе «Отладка».

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

Это отключит Git или другого поставщика VCS и улучшит общую производительность. Контрольный список оборудования. Убедитесь, что нет оборудования.

Если этот поток застрял в тупике, приложение зависнет. Откройте экземпляр Visual Studio, не нужно открывать решение или.

Как работают файлы символов; Расположение файлов символов и режим загрузки Файлы System.pdb содержат символы для файлов Windows DLLs.exe.

Если блока catch нет, вы получаете второй шанс экспортировать символы для C:\WINDOWS\system32\kernel32.dll kernel32!

Нажатие и наведение курсора на символ также не отображается. @ z14git О, похоже, что основной процесс дает сбой или зависает.

Студия VS большую часть времени не останавливается на достигнутом. Кстати, я отлаживаю с загрузкой всех символов. [ExtensionOfformStrVendTable]

NET-сборка без символов или исходного кода. Поэтому, если вы подключаете Visual Studio, когда модуль уже загружен.

Читайте также: