Липсващ номер на ред в трасирането на стека, въпреки че PDB файловете са включени

Това ме побърква. Имам тази уеб услуга, внедрена с C# с помощта на VS 2008. Публикувам я в IIS. Модифицирах компилацията на изданието, така че pdb файловете да се копират заедно с dlls в целевата директория на 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 файловете не се копират във временната папка?

Между другото, когато прикача към работния процес, виждам, че се казва Symbols loaded!


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
Проверих този файл и в него няма ‹deployment retail=true /›. - person kaptan; 15.02.2010
comment
В коментар в свързаната по-горе публикация stackoverflow.com/questions/2673623/, потребителят @Graeme казва, че ако направите това, проследяването на стека се изключва изцяло, не само номера на редове. - person Joshua Frank; 21.10.2011

Прикрепете към работния процес с помощта на VS или windbg и вижте дали той може да намери вашия pdb и дали съвпада с вашия асембли?

Друга често срещана причина е, че всъщност използвате dlls за освобождаване [които са оптимизирани]. Съмнявам се, че има нещо специфично за 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#, под раздела за изграждане, има бутон Разширени, където трябваше да задам информация за отстраняване на грешки на „пълна“ или „само за pdb“

person harvest316    schedule 30.09.2010