Отсутствует номер строки в трассировке стека, хотя файлы PDB включены

Это сводит меня с ума. У меня есть эта веб-служба, реализованная на C # с использованием VS 2008. Я публикую ее в IIS. Я изменил сборку релиза, поэтому файлы pdb копируются вместе с dll в целевой каталог inetpub.

Также файл web.config имеет debug = true.

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

Дополнительная информация: если я запускаю веб-приложение с использованием встроенного веб-сервера VS, оно работает, и я получаю номера строк в трассировке стека. Но если я скопирую те же файлы (pdb и dll), которые использует встроенный веб-сервер VS, в IIS, номера строк все равно будут отсутствовать в трассировке стека.

Кажется, что есть что-то связанное с IIS, которое игнорирует файлы pdb!

Обновление. Когда я публикую в IIS, все файлы pdb публикуются в каталоге bin, и все выглядит нормально. Но когда я перехожу к «C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files» в определенном каталоге, связанном с моим проектом, я вижу, что все файлы сборки (.dll) находятся там , но нет файлов pdb. Но этого не происходит, если я запускаю проект с использованием встроенного веб-сервера VS. Поэтому, если я вручную скопирую файлы pdb во временную папку, я могу видеть номера строк.

Есть идеи, почему файлы pdb не копируются во временную папку?

Кстати, когда я подключаюсь к рабочему процессу, я вижу, что он говорит, что символы загружены!


person kaptan    schedule 04.02.2010    source источник
comment
вы используете WCF для вызова этого веб-сервиса?   -  person Rubens Farias    schedule 05.02.2010
comment


Ответы (5)


У меня была такая же проблема, и я пробовал все под солнцем, чтобы попытаться исправить это. Ничего не работало, пока я не нашел принятый ответ на этот аналогичный вопрос: IIS не выдает номера строк в трассировке стека, хотя pdb присутствует.

Оказывается, используя олицетворение с помощью web.config:

<identity impersonate="true" />

вызывает потерю номеров строк в трассировке стека. Я вынул запись, и мои номера строк вернулись, вернули их, и через несколько часов (обновление билета Kerberos?) Номера строк снова исчезли.

Не уверен, почему олицетворение влияет на трассировку стека, но это так - был бы рад, если кто-то подтвердит / объяснит это ...

Мне нужно включить олицетворение для большинства моих сайтов (и на этих сайтах есть номера строк, поймите), поэтому я отключил его для этого конкретного веб-сайта и получил свои номера строк !!

person Chris Porter    schedule 03.12.2010
comment
Это единственное решение, которое у меня сработало. Я надеюсь, что impersonate = true не нужен моим сайтам. - person Arvin; 27.03.2012
comment
Спасибо, это один из тех маленьких скрытых побочных эффектов Microsoft, которые могут заставить вас потратить очень много времени. - person f.cipriani; 08.08.2018

Возможно, на сервере, на котором вы публикуете, настроен параметр <deployment retail="true" /> в системном machine.config файле в:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG

Для получения дополнительной информации см .:

Конфигурация ASP.NET - элемент развертывания (схема настроек ASP.NET )

Просто мысль.

person Kev    schedule 05.02.2010
comment
Я проверил этот файл, и в нем нет ‹развертывания retail = true /›. - person kaptan; 15.02.2010
comment
В комментарии к связанному выше сообщению stackoverflow.com/questions/2673623/, пользователь @Graeme сообщает, что если вы это сделаете, он полностью отключит трассировку стека, не только номера строк. - person Joshua Frank; 21.10.2011

Подключитесь к рабочему процессу с помощью VS или windbg и посмотрите, сможет ли он найти ваш pdb и соответствует ли он вашей сборке?

Другой распространенной причиной является то, что вы фактически используете релизные библиотеки DLL [которые оптимизированы]. Я сомневаюсь, что это имеет какое-то отношение к IIS.

person Fakrudeen    schedule 05.02.2010
comment
Файлы .pdb можно без проблем использовать с Release или оптимизированными dll. Я делал это много раз. - person Dave Black; 13.07.2015

Не забудьте установить debug = true в web.config, без него номера строк в исключениях не отображаются.

person titrat    schedule 24.02.2010

Не уверен, что это поможет, но в моих свойствах проекта VS2008 C # на вкладке сборки есть кнопка Advanced, где мне нужно было установить для отладочной информации значение «full» или «pdb-only»

person harvest316    schedule 30.09.2010