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

Я пытаюсь понять, почему я получаю сообщение «Точка останова в настоящее время не будет достигнута. Для этого документа не загружены символы» при попытке отладки приложения моего веб-сайта (примечание: нет веб-приложения, если это имеет значение)

Пока я узнал, что файл pdb (база данных отладки проекта) так же важен, как и исходный код, и он должен появиться в папке bin, но по какой-то причине файл отсутствует, там помещены только некоторые DLL, на самом деле есть во всем каталоге нет файла pdb.

Мой первый вопрос: там должен быть файл pdb независимо от того, какой проект разрабатывается. Правильный?

Второй вопрос: как я могу воссоздать этот файл снова или какие шаги нужно сделать, чтобы снова отладить проект?


person Somebody    schedule 20.01.2012    source источник


Ответы (6)


Я делаю несколько вещей, чтобы попытаться исправить эту проблему:

  • Очистите временные файлы ASP.NET (C: \ Windows \ Microsoft .NET \ Framework {версия} \ Temporary ASP.NET files {site} (вам нужно будет закрыть Visual Studio и все веб-браузеры, указывающие на сайт разработки)
  • Запустите диспетчер задач и щелкните правой кнопкой мыши процесс W3WP.EXE, выберите УСТАНОВИТЬ AFFINITY и снимите флажки со всех ЦП, кроме одного.

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

person Tim    schedule 23.01.2012
comment
Привет, Тим, спасибо за пояснение, но я не вижу, чтобы процесс W3WP.EXE работал в диспетчере задач. И еще один вопрос, теперь я могу снова отладить свой веб-сайт, как я уже сказал, но у меня все еще есть некоторые библиотеки DLL, которые еще не загружены. Есть идеи, как это исправить? - person Somebody; 24.01.2012
comment
Я предполагаю, что вы используете отладчик VS вместо того, чтобы подключаться к процессу. Попробуйте удалить временные файлы ASP.NET и снова запустить отладчик. - person Tim; 24.01.2012
comment
Я не могу удалить временные файлы asp.net, даже если закрою VS, мне придется выйти из системы, а затем снова войти в систему, это звучит для вас странно? - person Somebody; 24.01.2012
comment
Я тоже видел, как IIS блокирует файлы на мне, это совсем не странно. (Иногда это сводит меня с ума) Попробуйте iisreset / stop, закройте все веб-браузеры, подключенные к сайту, закройте VS и попробуйте снова удалить файлы. После того, как вы закончите, не забудьте выполнить iisreset / start. - person Tim; 24.01.2012
comment
Спасибо, знаешь что? на некоторых страницах точка останова работает (кажется заполненной), а на других - нет, но все же странные вещи: s - person Somebody; 24.01.2012
comment
У меня все еще есть две библиотеки DLL: InputsSanitizer.dll и Interop.CAPICOM.dll без загруженных символов, но пока все точки останова заполнены, так что спасибо! - person Somebody; 24.01.2012

У вас должен быть компилируемый код, чтобы получить pdb. Похоже, вы это делаете.

Обычно происходит то, что вы настроили свою сборку как «Release» вместо «Debug».

http://msdn.microsoft.com/en-us/library/wx0123s5.aspx

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

http://msdn.microsoft.com/en-us/library/ms228298(v=vs.80).aspx

person Thomas Langston    schedule 20.01.2012
comment
Обновленный ответ с другим потенциальным решением. - person Thomas Langston; 21.01.2012
comment
режим выпуска по-прежнему генерирует файлы pdb - person Adrian Iftode; 21.01.2012
comment
@AdrianIftode Иногда да. Иногда нет. stackoverflow.com/questions/291214/ - person Thomas Langston; 21.01.2012
comment
Правда спасибо. В файле web.config также есть раздел компиляции, в котором можно установить параметры компиляции. Это для сгенерированных dll с помощью ASP .Net для файлов aspx и ascx. Если есть несколько разделов ‹script runat = server› - person Adrian Iftode; 21.01.2012
comment
@ThomasLangston относительно вашего второго совета, я не смог найти никакого развертывания retail = true и по умолчанию false. Так что я думаю, что здесь дело обстоит не так. - person Somebody; 21.01.2012
comment
Также раздел компиляции учитывается, когда проект является веб-сайтом, а не проектом веб-приложения. - person Adrian Iftode; 21.01.2012
comment
Проверьте раздел компиляции и раздел компиляторов. Должно выглядеть ‹compilation debug = true› ‹/compilation› и проверьте, установлен ли атрибут compilerOptions (которого нет в этом разделе, а в разделе компиляторов). - person Adrian Iftode; 21.01.2012
comment
В случае веб-сайта код файлов компилируется ASP .Net, а не вами с Visual Studio, поэтому в папке bin нет файлов dll и pdb, эти файлы управляются ASP .Net, когда сайт находится в сети. Однако папка Bin может содержать другие файлы dll и pdb. - person Adrian Iftode; 21.01.2012
comment
хммм интересное наблюдение @AdrianIftode, но мне все равно не повезло :( вроде все в порядке, может быть что-то с IIS? - person Somebody; 21.01.2012
comment
позвольте нам продолжить обсуждение в чате - person Somebody; 21.01.2012

Чтобы сгенерировать файлы .pdb в Release, вам необходимо установить свойства вашего проекта:

Компиляция \ Расширенные параметры компиляции \ Создать отладочную информацию => 'pdb-only' или 'Full'

Пакет / Публикация в Интернете \ Исключить сгенерированные символы отладки => снимите этот флажок

person Resource    schedule 26.01.2016

У меня только что возникла эта проблема, и оказалось, что для моего web.config задано значение debug = false.
Убедитесь, что compilation debug = true в вашем web.config

<compilation defaultLanguage="vb" debug="true" batch="false" targetFramework="4.0">
  <assemblies>
    <!-- add references to gac assemblies here-->
  </assemblies>
</compilation>
person csauve    schedule 25.05.2012
comment
Ага. Жаль, что в каждой статье о безопасности ASP.NET говорится, что это серьезная угроза безопасности. Не хотите защиты и номеров строк в трассировке стека? Жесткий... - person Roman Starkov; 08.07.2014
comment
Это применимо только в производственной среде, и это правильно. - person csauve; 08.07.2014
comment
Может быть, немного неуместно обсуждать это в комментариях, но почему, черт возьми, правильно, что вы не можете знать номера строк в своих реальных необработанных исключениях производственной среды? - person Roman Starkov; 08.07.2014

В своих поисках решения моей проблемы я обнаружил следующее:

Во-первых, как сказал Адриан Ифтоде, в случае с веб-сайтом код файлов компилируется ASP .Net, а не VS, поэтому в папке bin нет файлов dll и pdb.

  • Поэтому я удаляю все временные файлы из: windows \ Microsoft .NET \ Framework \ v2.0.50727 \ Temporary ASP.NET files \

который содержит папку для каждого вашего проекта.

  • Удалите все временные файлы из iexplorer
  • В свойствах IIS для проекта \ Directory \ Configuration \ Debugging \ проверьте оба параметра под флажками отладки.

Сделав все вышесказанное, я снова смог отладить свой сайт.

person Somebody    schedule 23.01.2012

В дополнение к ответу ресурса выше, хотя я использую отладочные версии, мне также пришлось установить версию выпуска проекта для отладки (в моем случае пакет NuGet) на «pdbonly». Я также использую MyGet в качестве сервера символов, но, делая это, я также могу отлаживать локальные версии. У меня следующая установка:

Версии выпуска, загруженные на сервер пакетов MyGet NuGet Отладочные версии, загруженные на сервер MyGet Symbol

person Simon Storr    schedule 19.02.2019