Почему Visual Studio 2010 не может находить / открывать файлы PDB?

83

Я пытаюсь использовать OpenCV в VS 2010. Я любитель и изучаю первые шаги из вики OpenCV. Однако при попытке отладки своего проекта я получаю следующие ошибки:

'C: \ Windows \ SysWOW64 \ ntdll.dll', не удается найти или открыть файл PDB 'C: \ Windows \ SysWOW64 \ kernel32.dll', не удается найти или открыть файл PDB 'C: \ Windows \ SysWOW64 \ kernellbase. dll ', не удается найти или открыть файл PDB

У меня эти файлы находятся в правильном каталоге, так почему он не может их открыть? Что мне делать, чтобы исправить проблему?

ХамидРезаХамидиЭсфахани
источник
Что вы имеете в виду под «в правильном каталоге»? PDB находится в той же папке, что и DLL?
harper
1
@harper: Учитывая, что рассматриваемые библиотеки являются системными файлами Windows, PDB, вероятно, не должны находиться в той же папке, что и DLL. Библиотеки DLL находятся в каталоге C: \ Windows \ SysWOW64, но символы PDB, скорее всего, будут в созданном вами каталоге кэша символов. Тот, который вы указываете в параметрах отладки Visual Studio.
Коди Грей
@Cody Gray: Можете ли вы скопировать PDB в каталог (вручную) или вам необходимо использовать серверы Microsoft (Source) Symbol Server?
harper
@harper: Понятия не имею, будет ли так работать. Я не уверен, что Visual Studio найдет там символы PDB (хотя думаю, что да ). Но что касается лицензирования, я почти уверен, что вам нужно использовать серверы символов MS. Как еще вы собираетесь получить файлы PDB? Я также не уверен, почему вы хотите это бойкотировать. Visual Studio имеет все эти функции, так почему бы не воспользоваться ими? Он предназначен для локального кэширования символов, поэтому вам не нужно каждый раз загружать их заново. Я даже не замечаю, что это происходит.
Коди Грей
@ Коди Грей: Я не хочу ничего бойкотировать. У меня даже этих PDB нет. Но мне любопытно, как это работает.
harper

Ответы:

124

Сначала измените следующие параметры:

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

Затем нажмите Ctrl+, F5и вы увидите удивительные вещи.

Seanlitow
источник
2
Вот Это Да! Это было потрясающе! Спасибо за этот ответ. +1 для вас!
Мэтью Крюс,
Чтобы было ясно, это будет загружать символы только один раз, верно? Это совсем не помешает мне работать в автономном режиме?
Seanny123
1
Вы знаете прямую ссылку для его скачивания? Я работаю в закрытой сети без доступа в интернет.
levkaster 05
2
Эхм ... Control F5 не присоединяет отладчик AFAIK. Итак, в этом ответе отсутствует суть.
Бакли
1
Я сделал то же, что ты сказал. но теперь он показывает, что некоторые символы загружены, в то время как остальные файлы pdb не добавлены
Хемант Парихар
20

Я почти уверен, что это предупреждения , а не ошибки. Ваш проект по-прежнему должен работать нормально.

Однако, поскольку вы всегда должны пытаться исправить предупреждения компилятора, давайте посмотрим, что мы сможем обнаружить. Я совсем не знаком с OpenCV, и вы не ссылаетесь на вики-руководство, которое следуете. Но мне кажется, что проблема в том, что вы используете 64-битную версию Windows (о чем свидетельствует папка "SysWOW64" в пути к файлам DLL), но материал OpenCV, который вы пытаетесь использовать, создан для 32-битной платформы. Поэтому вам может потребоваться перестроить проект с помощью CMake, как описано здесь .

В частности, перечисленные файлы являются системными файлами Windows. Файлы PDB содержат отладочную информацию, которую Visual Studio использует, чтобы вы могли выполнять отладку скомпилированного кода. На самом деле вам не нужны файлы PDB для системных библиотек, чтобы иметь возможность отлаживать собственный код. Но при желании вы также можете скачать символы для системных библиотек. Перейдите в меню «Отладка», нажмите «Параметры и настройки» и прокрутите список справа, пока не увидите «Включить поддержку исходного сервера». Убедитесь, что эта опция отмечена. Затем в древовидной структуре слева щелкните «Символы» и убедитесь, что выбран параметр «Серверы символов Microsoft». Щелкните OK, чтобы закрыть диалоговое окно, а затем попробуйте перестроить.

Коди Грей
источник
7
Я не совсем уверен, что я должен сказать в ответ на это. Вам нужна дополнительная помощь? Или вы просто оставляете комментарий? Потому что, если вам нужна дополнительная помощь, вам придется объяснить, что именно пошло не так, когда вы «попробовали это», и что вы подразумеваете под «не сработало». Мы все программисты, вы же знаете, что полезный отчет об ошибке не так.
Коди Грей
Извините, по какой-то причине все мое сообщение не было вставлено. Но с тех пор я исправил это следующим способом. stackoverflow.com/questions/1468726/…
daveomcd
10

Visual Studio Community Edition 2015

У меня была эта ошибка весь день. Я наконец исправил это, перейдя в Инструменты> Настройки импорта и экспорта> Сбросить все параметры> Сбросить общие настройки.

После сброса перейдите в Инструменты> Параметры> Отладка> Символы> - Затем установите флажок рядом с Microsoft Symbol Servers.

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

Как только он завершится, он должен снова заработать.

Никто
источник
Обновление до VS2109 16.8.1 каким-то образом уничтожило кеш символов, который из памяти мог находиться в каталоге Users / Temp. Предлагаемый общий сброс может не потребоваться перед повторным получением символов. Убедитесь, что символы находятся в безопасном каталоге кэша - и подождите около часа, пока они загрузятся (~ 375 МБ). Я выбрал MS вместо сервера Nuget только по привычке. Вместо сброса лекарством от паранойи было удаление всех файлов, сгенерированных VS (кроме .git) для проекта, перед тем, как начать заново.
Laurie Stearn
3

У меня такая же проблема. Оказывается, при компиляции проекта, полученного мной от кого-то другого, я не установил правильный проект StartUp (щелкните правой кнопкой мыши нужный запускаемый проект в обозревателе решений и выберите «Установить как проект StartUp»). Может быть, это поможет, ура.

Юрек Стефанович
источник
1

Ссылаясь на первый поток / другую возможность, VS не может открыть или найти файл pdb процесса, - это когда ваш исполняемый файл работает в фоновом режиме. Я работал с mpiexec и столкнулся с этой проблемой. Всегда проверяйте диспетчер задач и завершайте любой процесс exec, который вы собираетесь встроить в свой проект. Как только я это сделал, он отладился или собрал нормально.

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

Mpi
источник
1

Для пользователей VS2013 , оказавшихся здесь, как и я:

Tools -> Options -> Debugging -> Symbols

Вы увидите, что Cache symbols in this directory:поле пусто; вы можете либо просмотреть / ввести путь самостоятельно, либо просто нажать Load all symbolsкнопку. Появится окно с предупреждением: «Поскольку вы не выбрали каталог кэша символов, будет использоваться значение по умолчанию». Теперь вы увидите C:\Users\XXXX\AppData\Local\Temp\SymbolCacheв ранее пустом поле пути. Щелкните Load all symbolsвторой раз, и вы должны быть настроены. Нажмите ОК, и просто ради усердия очистите и восстановите свое решение.

зал
источник
0

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

ЗловещийРадуга
источник
0

У меня такие же предупреждения. Я не уверен, что это вопрос 32 против 64 бит. Просто загрузили новые символы, и некоторые проблемы были решены, но те, которые касаются OpenCV, остались. Это выдержка из вывода с решенной и нерешенной проблемой:

'OpenCV_helloworld.exe': загружен 'C: \ OpenCV2.2 \ bin \ opencv_imgproc220d.dll', не удается найти или открыть файл PDB

«OpenCV_helloworld.exe»: загружен «C: \ WINDOWS \ system32 \ imm32.dll», загружены символы (информация об источнике удалена).

Код выходит из 0 на случай, если кто-то спросит.

Программа «[4424] OpenCV_helloworld.exe: Native» завершилась с кодом 0 (0x0).

спарафлаш
источник
0

У меня такая же проблема. Отладка не работает с материалами, которые поставляются с исполняемым файлом OpenCV. вам нужно создать свои собственные двоичные файлы.
Затем включите серверы символов Microsoft в разделе Отладка-> параметры и настройки-> отладка-> символы.

Джон Ктеджик
источник
0

Я столкнулся с той же проблемой. Когда я запускал свой модульный тест на коде C ++, я получил сообщение об ошибке «Не удается найти или открыть файл PDB».

Журналы

Когда я посмотрел журнал вывода в Visual Studio, я увидел, что он ищет не ту папку. Я переименовал папку WinUnit, но что-то в коде WinUnit искало файл PDB, используя старое имя папки. Я думаю, они жестко это запрограммировали.

Нашел проблему

Когда я впервые загрузил и разархивировал файлы WinUnit, основная папка называлась «WinUnit-1.2.0909.1». После того, как я разархивировал файл, я переименовал папку в «WinUnit», так как ее легче вводить во время установки проекта Visual Studio. Но, видимо, это нарушило возможность найти файл PDB, хотя я настроил все в соответствии с документацией WinUnit.

Мое исправление

Я изменил имя папки на исходное, и оно работает.

Странно.

user2384458
источник
0

Была та же проблема, но работало другое решение.

Сначала я попробовал следующее, но ни одно из них не помогло:

  1. Загрузите символы, как предложено seanlitow

  2. Удалить / добавить ссылку на PresentationFramework и PresentationCore

  3. Перезагрузите систему

Решением было отменить последние несколько изменений, которые я внес в свой код. Я только что добавил пару переключателей и обработчиков событий для отмеченных и непроверенных событий. После удаления моих последних изменений все скомпилировано. Затем я добавил свои точные изменения, и все было правильно скомпилировано. Я не понимаю, почему это сработало - единственное, о чем я могу думать, это проблема с моим решением VS. В любом случае, если ни одно из других предложений не сработает, вы можете попробовать отменить свои самые последние изменения. ПРИМЕЧАНИЕ: если вы закроете и снова откроете Visual Studio, ваша история отмены будет потеряна ... так что вы можете попробовать это до закрытия VS.

Томас Бейли
источник