Информация недоступна символы для dll не загружены
Я создал конкретную dll с отладочной информацией (параметр компилятора / Zi и параметр компоновщика / DEBUG). С помощью оператора прерывания в основной программе я запустил Visual Studio для отладки. В списке модулей, показанном, как видно из меню Debug-> Windows, я мог видеть, что символы были загружены для интересующей dll. Однако, когда я открываю файл C ++ из этой dll и пытаюсь установить точку останова, он говорит об отладке символы недоступны для документа. Нет сомнений в том, что этот файл C ++ был скомпилирован в эту dll, и что это тот же источник, который использовался для сборки dll (только я сделал это). Почему это происходит? Пожалуйста, помогите, прежде чем я застрелюсь.
Является ли исходный код C ++ в точно том же месте на диске , как , когда DLL был построен? Или вы используете сервер символов с индексированием исходного кода?
То же самое сейчас происходит со мной. Я получаю разные точки останова, которые непредсказуемо срабатывают на разных прогонах. (Это прямое решение VC ++ MFC. Все сторонние библиотеки представлены в исходной форме и скомпилированы вместе с остальной частью решения.)
Хорошо, я выполнил обновление Windows, перезапустил, запустил некорректно работающую VS2008, выполнил чистку, выполнил перестройку, и я вижу жизненно необходимые точки останова в коде, который был скомпилирован при перестроении, отображаемом с незагруженными символами. Для меня это реальная и серьезная проблема, так что пора щедро.
У меня нет однозначного ответа, только несколько предложений.
Иногда mdm.exe (Machine Debug Manager) перестает работать должным образом. Помогает завершение процесса и повторный запуск Visual Studio. Однако, если проблема сохраняется между перезагрузками, это, вероятно, не является причиной.
Время исходного файла (последнее изменение) в будущем может вызвать всевозможные странные проблемы. Чтобы проверить время файлов, вы можете ничего не искать (Windows XP) или «*» (Windows 7). Это отобразит все файлы в выбранной папке. Затем отсортируйте результат по дате, чтобы увидеть максимальное / минимальное время файла. Я понятия не имею, откуда взялось неправильное время файла - я просто знаю, что это случается время от времени. Возможно, это сама Visual Studio, может быть, какой-нибудь другой инструмент, который я использую.
Вы можете попробовать запустить приложение, использующее вашу DLL из Visual Studio, с уже открытым проектом DLL. Для этого откройте «Свойства конфигурации», выберите страницу «Отладка» и введите .exe, который должен быть запущен (+ аргументы, если они вам нужны). Затем запустите сеанс отладки, как для проекта .exe.
Лекарство от многих проблем с Visual Studio - «очистить» проект вручную и выполнить полную повторную компиляцию. Удалите все файлы, которые создаются в процессе сборки, или хранят «параметры» решения или проекта. т.е. все файлы .suo .ncb .user плюс все, что находится в "промежуточных" и "выходных" папках. Если вы используете систему управления версиями, просто извлеките весь проект из системы управления версиями в чистый каталог и заново соберите его с нуля. (Получение всего "свежего" из системы управления версиями также решает любые потенциальные проблемы времени файлов - по крайней мере, с системами управления версиями, которые не сохраняют время файлов)
Другой возможной причиной может быть то, что VS загружает неправильный файл .pdb. Файл .pdb с совпадающим именем можно найти в каталоге сервера символов / символов, настроенном для VS (или в масштабе всей системы с помощью переменной _NT_SYMBOL_PATH), или в каталоге кэша символов VS. Каким образом файл .pdb с совпадающим именем оказался в таком месте - это совсем другая история, но можно легко проверить, загружен ли неправильный файл .pdb: удалите файл .pdb, сгенерированный сборкой, и запустите сеанс отладки. . Если VS отслеживает «загруженные символы» для рассматриваемого .exe / .dll, он должен был найти файл .pdb в другом месте.
Иногда кажется, что VS каким-то образом портит расположение точек останова. Я точно не знаю, когда и как это происходит, но один из симптомов заключается в том, что если удалить несколько точек останова, они волшебным образом снова появятся при запуске следующего сеанса отладки. Я обнаружил, что установка новой точки останова, затем удаление всех точек останова с помощью отладки / удаления всех точек останова и повторная установка необходимых помогает.
У меня есть большое решение в Visual Studio 2012, которое состоит из исполняемых файлов и проектов библиотеки классов. При отладке приложения точки останова в одном конкретном проекте библиотеки классов не попадают.
Я посмотрел на Отладка> Windows> Модули окно для проверки статуса символы для этого проекта и он говорит "не удается найти или открыть файл PDB".
Он также говорит "нет" под "пользователь Код"
Я попробовал несколько инструментов, чтобы проверить, действительно ли pdb и dll совпадают, и используя chkmatch Я видел, что GUID в запускаемой dll и pdb в папке obj не совпадают.
таким образом, оказывается, что, хотя dll и pdb в папке obj проекта совпадают, dll, которая фактически копировалась в целевую папку приложения событием после сборки, была старой dll из предыдущей сборки.
событие после сборки был запуск до того, как этот конкретный проект построил или, по крайней мере, закончил строительство и копировал в существующей dll из корзины, которая впоследствии была перезаписана продолжающейся сборкой.
Я решил проблему, отредактировав зависимости проекта для решения и убедившись, что проект с событием после сборки зависит от проекта, который не загружался, и теперь pdb загружается во время отладки.
Я просто удалил папку bin и obj из папки проекта запуска и перестроил решение.
для меня я просто удалил проект из IIS и создал его снова, и он отлично работает
для меня это помогло использовать инструмент chkmatch, а затем просто закрыть и открыть visual studio, очистить и перестроить. Теперь мой pdb также загружается. Вы можете убедиться, что это так, как указал Nanhydrin, из Debug -> Windows -> Modules - это представление доступно только во время отладки.
в моем случае более старая версия ссылочной dll была в моем GAC. Очистил его, и это сработало.
Я вошел в свойства проектов, вкладку компиляции, расширенные параметры компиляции. и снимите флажок Enable Optimizations флажок
напоминание: поместите проект в конфигурацию "Debug". для таких, как я, которые забывают и чувствуют себя глупо.
удалил проект из решения и добавил его снова в решение, которое работало для меня. :)
немного поздно на вечеринку здесь-на всякий случай это полезно.
У нас есть несколько отдельных веб-сайтов (в разных решениях в Visual Studio). При начальной загрузке одного из сайтов мы делали звонок на другой сайт, который возвращал изображение.
оба этих сайта ссылались на общую DLL, но во время работы на одном сайте не поняли, что другой сайт был оставлен в сборке "Release" - после загрузки сайта оскорбительная DLL была перестроена, но без символов.
престижность Nanhydrin как для упоминания окна отладки модулей (очень полезно), Так и для того, чтобы поставить меня на правильный путь с событием сборки post.
ответ из другого потока, который работал для меня:https://stackoverflow.com/a/28476665/5969306
- В Visual Studio: свойства проекта - > сборка - > кнопка Дополнительно - > сведения об отладке раскрывающегося списка и убедитесь, что значение не "нет".
У меня просто была эта проблема, и я думал, что поставлю свое исправление здесь, так как это моя помощь другим (может быть, даже себе снова?!) в будущем.
убедитесь, что при подключении к процессу на удаленном сервере значение "Attach to" равно
автоматическое определение типа кода для отладки
чтобы сделать это, когда квалификатор сервера был предоставлен и список процессов виден, нажмите кнопку "Выбрать" рядом с "Присоединить к" входу.
Затем выберите "Автоматически определить тип кода для отладки"и OK из экрана, затем прикрепите.
По крайней мере, для меня это решило проблему.
в моем случае была галочка на Enable Just My Code на Tools>>Options>>Debugging>>General .
Я снял его, и он работал.
У меня была такая строка в моем окне отладки:
символы для модуля ' MyModule.dll файлы не были загружены.
Я удалил опцию "оптимизировать код" в свойствах проекта -> Build. И ошибка исчезла.
эта проблема может быть из-за неправильная ссылка на DLL использован в проекте.
удалить параметр obj и bin папки в текущем проекте и build снова.
Я попробовал следующее.
- убедитесь, что конфигурация отладки, флаг отладки и полная отладочная информация установлены на всех сборках.
- удалить все папки bin и obj и все библиотеки DLL, связанные с проектом со всей моей машины.
- воссоздать проекты, вызывающие проблему с нуля.
- перезагрузка.
У меня есть два WinForms проекты в решении. Один из них загружает отладочную информацию, другой-нет. Они оба относятся к сборке, на которую я пытаюсь получить отладочную информацию точно так же в файле проекта. Есть идеи?
Я хочу добавить здесь, в основном для себя, когда я вернусь, чтобы рассмотреть этот вопрос, что символы не загружаются до загрузки сборки, и сборка не загружается до тех пор, пока она не понадобится. Если точка останова находится в библиотеке, которая используется только в одной функции в main сборка, символы не будут загружены (и он покажет точку останова как не попадает), пока эта функция не будет вызвана.
начать отладку, как только вы прибыли в точку останова или использовать Debug > Break All используйте Debug > Windows > Modules . Вы увидите список всех сборок, загруженных в процесс. Найдите тот, для которого вы хотите получить отладочную информацию. Щелкните его правой кнопкой мыши и выберите Информация о загрузке символа. Вы получите диалоговое окно, в котором перечислены все каталоги, в которых он искал .pdb-файл для сборки. Сверьте этот список с фактическим .расположение ПДБ. Убедитесь, что он не найдет старого.
в нормальных проекты, сборка и ее .pdb-файл всегда должен быть скопирован IDE в ту же папку, что и ваш .исполняемый. Папка bin\Debug вашего проекта. Убедитесь, что вы удалили один из GAC, если Вы играли с ним.
сначала попробуйте перестроить проект, щелкнув правой кнопкой мыши проект > перестроить Если это не сработает, попробуйте очистить проект (щелкните правой кнопкой мыши на проекте > очистить)
Если это не сработало, проверьте это:
- Правой Кнопкой Мыши ваш проект
- выберите [свойства]
- выберите [Build] tab
- убедится [определить константу debug] и [определение Константа трассировки] проверен
- выберите [дополнительно] внизу построить новые
- убедитесь в том, что [Отладочная Информация:] установлено значение [полный]
- клик [OK] и восстановить этот проект ;-)
(Шаг 6 генерирует .pdb файлы, это отладочные символы)
просто что - то простое, чтобы попробовать-вы, возможно, уже пробовали. Щелкните правой кнопкой мыши решение в обозревателе решений, нажмите кнопку "очистить решение", это удаляет все скомпилированные и временные файлы, связанные с решением.
выполните перестроение решения и повторите попытку отладки.
У меня также были проблемы с несколькими проектами точек останова в решении-некоторые скомпилированы как x86, некоторые как x64.
отключите опцию "Только мой код"в настройках Debug/General.
кросспостинг это исправление от Ганс К что я нашел на подобную тему >> здесь :
щелкните правой кнопкой мыши на решении -- > свойства
посмотрите в разделе Общие свойства --> Startup Project
выберите несколько проектов запуска
выберите пуск действий по проектам нужно отлаживать.
выбранный ответ привел меня к исправлению моей проблемы. Но мне нужно сделать еще несколько вещей:
даже с" Debug", выбранным в раскрывающемся списке:
и в свойствах проекта > Build:
Visual Studio не загружала символы в определенный проект. Поэтому в этом раскрывающемся списке я выбираю "Configuration Manager" и вижу, что настройки моего веб-проекта были неверно:
затем я установил это в "Debug", и он начал генерировать . но мне нужно вручную скопировать PDB и DLL и поместить в папку, которую искал VS (вот где мне помог выбранный ответ):
Debug > Windows > Modules чтобы увидеть, какие модули загружаются, поместите меня в правильном направлении.
просто выполните следующие действия:
- на Debug из меню
- нажать на кнопку присоединить к процессу
- возле прикрепить к, нажмите на кнопку выберите
- в Выберите Тип Код
проверьте, если ваш .файл pbd отсутствует в папке bin/Debug. Если это затем перейдите в "свойства" вашего проекта, выберите "построить", а затем "дополнительно" внизу. Выберите "полный" в разделе "отладочная информация" в появившемся новом окне. Это была моя проблема, и я ее решил.
иногда, даже если это дает вам эту ошибку, breakpoint все еще попадает, поэтому просто игнорируйте ошибку. Это происходит довольно часто в Views на MVC web app .
в моем случае" оптимизировать код " был проверен в моих свойствах проекта. Это заставило VS видеть мою сборку как "не мой код", и, в свою очередь, она не загружала символы для нее.
решением было снять этот флажок.
просто проверьте, находится ли ваше решение в режиме выпуска.
попробуйте запустить visual studio в качестве администратора в windows.
вам нужно включить "Generate debug info" в настройках компилятора
опция "начать отладку, отладка + Windows + модули" не существует в Microsoft Visual Studio Express 2013 edition.
сняв "Использовать Режим Управляемой Совместимости" в настройках инструментов отладка исправляет это.
в моем случае я пытаюсь отладить в режиме relase. Как только я изменю его на режим отладки. Его работа
Я пробовал все, что упоминалось выше, но ничего не получилось. [чистое решение, и проверка для файлов ПДБ ЕТК.]
даже публикация того же решения не решила проблему.
затем я вернулся к тому, что я обычно делаю, чтобы решить (обмануть эту упрямую Visual Studio)
все, что я сделал, это намеренно изменить код и опубликовать решение. Затем я вернул изменение и опубликовал его снова.
вуаля [PDB файлы избавления от злых духов].. Не очень разумное решение, но это сработало.. :-|
вместо того, чтобы делать все эти вещи просто
решение это исправит проблему
возможно, Visual Studio не может копировать и заменять существующие файлы (.dll и .ПДБ) рядом .exe, так как есть еще один. Поэтому, если я удалил вручную, VS мог бы создать новый рядом .исполняемый.
Я думаю, что основная причина проблема в том, что Visual Studio использует другой файл во время выполнения, не файл из проекта, с остановкой.
может быть, этот ответ поможет кому-то !
Что нужно проверить, просто чтобы быть ясно: убедитесь, что конфигурация Debug и выхода не. Вы можете отлаживать проект запуска в режиме "Release", но не библиотеку ссылочных классов.
У меня есть Visual Studio 2005, настроенный для использования серверов символов Microsoft. У меня тоже есть UltraMon установлен, который вводит DLL hook в каждый процесс. Всякий раз, когда я начинаю отлаживать мой MFC приложение, Visual Studio говорит:
для чего-либо от мгновения ока до нескольких десятков секунд. Он никогда не найдет эти символы. Могу я сказать ему, чтобы он не утруждал себя поисками?
(Я попытался создать пустой RTSUltraMonHookX32.pdb файл, но визуальный Студия видит, что это нехорошо, и продолжает искать.)
вы не можете сделать это очень мелкозернистым способом, но вы можете отключить автоматическую загрузку символов, а затем вручную выбрать символы для загрузки через окно модулей (Debug -> Windows -> Modules).
отключить автоматическую загрузку символов
- Инструменты - > Параметры - > Отладка - > Символы
- Проверьте "поиск в вышеуказанных местах только при загрузке символов вручную"
также проверьте, что у вас нет переменной среды" _NT_SYMBOL_PATH". Если у вас есть этот var символы будут загружаться независимо от настроек VS.
начиная с Visual Studio 2010, Вы можете перейти к:
и введите список DLL, которые занимают слишком много времени для загрузки. Я использую полный путь, заданный окном вывода; возможно, он принимает подстановочные знаки или простые имена файлов.
в моем случае это было потому что я установил" включить .NET Source Stepping " в true на
вместо того, чтобы установить его в false, я поставил "включить только мой код" в "True", что автоматически "включить .Чистый источник шагать" в false. Он дал мне предупреждение, прежде чем сделать это:
надеюсь, это кому-то поможет.
вы также можете настроить исключения сервера символов, которые не будут пытаться загрузить в HKEY_CURRENT_USER\Software\Microsoft\Symbol Server\Exclusions или, возможно, также HKEY_LOCAL_MACHINE\Software\Microsoft\Symbol Server\Exclusions или через a .ini-файл в %WINDIR%\system32\inetsrv\Symsrv.ini (используйте заголовок [исключения] и поместите каждое исключение в свою собственную строку). Исключения-это простые совпадения шаблонов, поэтому используйте msxml5.* например.
не только _NT_SYMBOL_PATH может вызвать такое поведение, но для меня это был _NT_ALT_SYMBOL_PATH переменная среды, которая вызывала задержки.
(Я считаю, что добавил эту переменную при экспериментировании с WinDbg)
в Visual Studio 2013 Pro, если сервер символов Microsoft установлен, VS попытается загрузить все символы на свой сервер, что приведет к увеличению времени.
The Breakpoint will not be hit. No Symbols have been loaded for this document.
Я пробовал чистить и перестраивать, но это не имеет значения.
Я также пробовал искать в Debug-> Windows-> Modules. Если я щелкну правой кнопкой мыши по модулю, который пытаюсь отладить, и нажму «Информация о загрузке символов», появится список мест, из которых он пытался загрузить символы. Первый в списке правильный и файл существует, но рядом с ним эта ошибка
C:\path\to\my\symbol\Debug\MyProject.pdb: Unknown symbol handler for error
Вы пытаетесь отлаживать код в исполняемом проекте, который вы запускаете? Или код в статической библиотеке, с которой вы связались?
Также убедитесь, что для имени выходного файла (pdb) задано значение $(OutDir)$(TargetName) . Вы должны найти его в свойствах проекта -> свойствах конфигурации -> C / C ++ -> Выходные файлы -> Имя файла базы данных программы.
Для проектов C ++ / CLI вам может потребоваться перейти в свойства проекта -> Отладка и установить для типа отладчика значение «Смешанный», для меня в VS 2015 по умолчанию установлено значение «Авто», что не очень хорошо работает.
Прежде всего, возможно, что некоторые из ваших модулей не будут отображаться в окне модуля, потому что некоторые из них могут загружаться динамически (только по мере необходимости).
Возможно, вы захотите проверить свойства своего проекта в разделе «Компоновщик»> «Отладка»> «Создать файл базы данных программы» и «Создать отладочную информацию». Убедитесь, что эти два параметра установлены правильно.
Также проверьте, установлен ли C / C ++> General> Debug Information Format на Program Database for Edit And Continue (/ ZI) или что-то подобное.
Я знаю, что вы упомянули, что ваш файл символов существует, но проверка того, что я только что упомянул, гарантирует, что у вас есть правильная версия вашего символа в нужном месте.
Наконец, проверьте, настроены ли все ваш проект и файлы в вашем решении для компиляции как Debug, а не Release или что-то еще, потому что для этого проекта / файла не будут созданы символы (следовательно, они не будут загружены).
Читайте также: