Не са заредени символи и липсва pdb файл

Опитвам се да разбера защо получавам съобщението „Точката на прекъсване в момента няма да бъде достигната. За този документ не са заредени символи“, когато се опитвам да отстраня грешки в приложението си за уеб сайт (забележка: няма уеб приложение, в случай че има значение)

Досега разбрах, че файлът pdb (база данни за отстраняване на грешки в проекта) е също толкова важен, колкото и изходният код и трябва да се появи в папката bin, но по каквато и да е причина файлът липсва, там са поставени само някои dll файлове, всъщност има няма pdb файл в цялата директория.

Първият ми въпрос е: Трябва да има pdb файл, независимо от вида на проекта, който се разработва. Правилно?

Втори въпрос: Как мога да пресъздам отново този файл или какви стъпки трябва да се направят, за да се отстранят грешки в проекта отново?


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


Отговори (6)


Няколко неща, които правя, за да се опитам да коригирам този проблем:

  • Изчистете временните ASP.NET файлове (C:\Windows\Microsoft .NET\Framework{version}\Temporary ASP.NET files{site} (Ще трябва да излезете от Visual Studio и всички уеб браузъри, сочещи към сайта за разработка)
  • Стартирайте диспечера на задачите и щракнете с десния бутон върху процеса W3WP.EXE, изберете SET AFFINITY и премахнете отметката от всички CPU освен един

Обикновено, ако направя това, след това се прикача към процеса 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

Използвам Core Plot за показване на графика на точкова диаграма и бих искал да използвам жест с плъзгане, за да превключвам между самата графика и UITableView на данните, от които е съставена графиката. Моят UISwipeGestureRecognizer работи добре в табличния изглед, но събитията с плъзгане не се задействат на графиката. Графиката е UIView с клас, зададен на CPTGraphHostingView, а моят код е както следва:

UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHistoryData:)];
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];
[graphHostingView addGestureRecognizer:swipeRight];
[tableListView addGestureRecognizer:swipeRight];

Предполагам, че CPTGraphHostingView „изяжда“ плъзганията по някакъв начин, така че те не се откриват от моя разпознавач. Може ли някой да коментира или да ме насочи на правилния път?

- person Somebody; 24.01.2012

Трябва да имате компилируем код, за да получите pdb. Звучи сякаш го правиш.

Обикновено това, което се случва, е, че сте настроили вашата компилация да бъде „Освобождаване“ вместо „Отстраняване на грешки“.

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

Ако създавате уеб приложение, вашите конфигурационни файлове може също да имат настройка „Продажба на дребно“. Ако е зададено на true, винаги сте в режим „Освобождаване“, дори ако в конфигурацията на компилацията ви пише друго.

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
режимът Release все още генерира 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, така че няма dll и pdb файлове в папката bin, тези файлове се управляват от 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, трябва да зададете свойствата на вашия проект:

Compile\Advanced Compile Options\Generate Debug Info => 'pdb-only' или 'Full'

Package/Publish Web\Exclude генерирани символи за отстраняване на грешки => премахнете отметката от това

person Resource    schedule 26.01.2016

Току-що имах този проблем и се оказа, че моят web.config е настроен на debug=false.
Уверете се, че компилацията 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

В търсенето на решение на моя проблем открих това:

Първо, както каза Adrian Iftode, в случая с уеб сайта кодът зад файловете се компилира от ASP .Net, а не от VS, така че няма dll и pdb файлове в папката bin.

  • Така че изтривам всички временни файлове от: windows\Microsoft .NET\Framework\v2.0.50727\Temporary ASP.NET files\

който съдържа папка за всеки проект, който имате.

  • Изтрийте всички временни файлове от iexplorer
  • В свойствата на IIS за project\Directory\Configuration\Debugging\ проверете и двете опции под флаговете за отстраняване на грешки.

Като направих всичко по-горе, успях отново да отстраня грешки в уебсайта си.

person Somebody    schedule 23.01.2012

В допълнение към отговора на Resource по-горе, въпреки че изпълнявам версии за отстраняване на грешки, трябваше да настроя версията Release на проекта за отстраняване на грешки (в моя случай пакет NuGet) също на „pdbonly“. Също така използвам MyGet като символен сървър, но като правя това, мога също да отстранявам грешки с локални версии. Имам следната настройка:

Версии на изданието, качени на сървъра за пакети MyGet NuGet Версии за отстраняване на грешки, качени на сървъра на MyGet Symbol

person Simon Storr    schedule 19.02.2019