Як увімкнути "Увімкнути ступінь джерела .NET Framework"?


118

Оновлення 22 лютого 2013 року : запис Microsoft Connect має відмітку від Alok Shriram (менеджер програми, бібліотеки базового класу, .NET Framework), що тепер проблему слід вирішити. Запис Connect позначено як вирішено (виправлено) :

Тепер це питання слід вирішити. Ми опублікували оновлення до довідкових джерел. Будь ласка, повідомте нас про те, якщо проблема все ще не виправлена.

Півтора року.

Бонусні посилання

Оригінальне запитання

Як увімкнути перехід джерела .NET Framework у Visual Studio 2010?


Примітка . Це питання є частиною більшого цілого:


Visual Studio 2010 поставляється з новою функцією:

  • Інструменти, Параметри, Налагодження, Загальне, Увімкнути кроки джерела .NET Framework

Знімок екрана меню параметрів

Дотримуючись інструкцій на сторінці MSDN Як: Налагодження .NET Framework Джерело :

Щоб увімкнути налагодження джерела .NET Framework

  1. У меню Інструменти натисніть Параметри .

  2. У діалоговому вікні " Параметри " натисніть категорію Налагодження .

  3. У полі Загальне встановіть такі прапорці:

    • Увімкніть крокування джерела .NET Framework
    • Увімкнути підтримку вихідного сервера

Я роблю це:

Знімок екрана меню параметрів, виділяючи вибрані параметри

Примітка . Ви зауважите, як зазначає сторінка MSDN, і, як я помітив, перевірку Enable .NET Framework вихідного кроку , автоматично зніміть прапорець ** Enable Just My Code (лише керований). Я також включив діагностичні повідомлення підтримки вихідного сервера.

Якщо ввімкнути ці параметри, автоматично встановіть для мене місце завантаження кешу символів:

Знімок екрана меню параметрів, що показує каталог кешу (виділено)

Примітка : запис Microsoft Symbol Server вже присутній (і його неможливо видалити).


Сторінка MSDN говорить про завантаження символів:

Завантажити символи Framework за допомогою вікна Модулі

  1. У вікні Модулі клацніть правою кнопкою миші модуль, символ якого не завантажений. Ви можете дізнатися, завантажуються чи ні символи, переглянувши стан символів стовпець " ".

  2. Вкажіть на Завантажити символи З і натисніть Сервери символів Microsoft, щоб завантажити символи з сервера загальнодоступних символів Майкрософт або Шлях символу, щоб завантажити з каталогу, де ви раніше зберігали символи.

Я пробую це:

введіть тут опис зображення

і тоді всі символи завантажуються:

Скріншот вікна модулів, як описано вище

Я сидів на точці перерви, яка збирається зайти в рамковий код .NET:

Скріншот коду, записаний нижче

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

Натискання F11призводить до того, що налагоджувач просто переходить до наступного рядка:

Скріншот коду, записаний нижче

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

    //Record the running scale factor used
    this.scaleFactor = new SizeF(
            this.scaleFactor.Width * factor.Width,
            this.scaleFactor.Height * factor.Height);

Як увімкнути перехід джерела .NET Framework у Visual Studio 2010?


Я сиджу на точці перерви у своєму коді. Я намагаюся подвійним клацанням клацнути функцію далі в стеці викликів. Це, я сподіваюся, дозволить перейти до коду .NET:

введіть тут опис зображення

За винятком того, що це не працює: Visual Studio каже мені, що джерела немає:

Знімок екрана повідомлення про помилку із повідомленням про відсутність джерела

Як увімкнути перехід джерела .NET Framework у Visual Studio 2010?


Якщо я перейду до перегляду демонтажу, перш ніж спробувати вступити в .NET-код ( налагодження -> Windows -> демонтаж ), я можу побачити callкод .NET:

Скріншот коду

І коли я це роблю, я закінчую налагодження розбирання System.Windows.Forms.ScaleControl:

Знімок екрана демонтування вікна

Що не те саме, або настільки ж корисне, як можливість перейти до джерела .NET Framework.

Як увімкнути перехід джерела .NET Framework у Visual Studio 2010?


Налаштований шлях до кешу символів на моєму комп’ютері містить файли кешу символів:

Знімок екрана з переліком папок

Отже, це завантаження pdb файлів символів, але відмова від їх використання.

Як увімкнути перехід джерела .NET Framework у Visual Studio 2010?


Леппі запропонував перевірити Debugжурнал (з відкритим вікном журналу налагодження; інакше він нічого не записує):

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

Раніше в журналі я бачу, як він завантажує символи для System.Windows.Forms.dll:

Loaded 'C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Symbols loaded.

введіть тут опис зображення

Так воно і є знайти свої символи, але стверджує , що він не міг їх знайти.

Як увімкнути перехід джерела .NET Framework у Visual Studio 2010?


Хлопець з Microsoft Італія пропонує вимкнути Потрібні вихідні файли, щоб вони точно відповідали оригінальній версії :

Знімок екрана параметрів

Це не виправило.

Як увімкнути перехід джерела .NET Framework у Visual Studio 2010?


Було припущено, що існує помилка з вихідним сервером Microsoft для .NET Framework 4.0 . Виконуючи цю пропозицію, я переключив проект на ціль .NET Framework 3.5 :

введіть тут опис зображення

Це не виправило.

Як увімкнути перехід джерела .NET Framework у Visual Studio 2010?


Хтось десь просто роздумував, чи використовує інша людина, що відчуває цю ж проблему, 64-бітну версію налагоджувача . Тепер немає такої речі, як 64-розрядна версія Visual Studio, але я спробував переключити свій проект з AnyCPU на x86 (він був JITed до x64), на випадок, якщо Microsoft не підтримує 64-бітні процесори:

введіть тут опис зображення

Це не вирішило:

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

Як увімкнути перехід джерела .NET Framework у Visual Studio 2010?


Дивитися також


Ви перевірили вихідний код "кеш"?
леппі

@leppie Що ви маєте на увазі під "кешем" вихідного коду? Якщо ви маєте на увазі папку, в якій зберігається вихідний код, вона заповнюється (Дивіться оновлення 4 )
Ian Boyd

Так. Чи можливо відкрити цей вихідний файл і встановити точку перерви?
леппі

1
відмінне написання випуску!
andersonbd1

1
Він також не працює у VS2012. Це працювало добу, після того, як я все налаштував і просто перестав працювати. Два дні, десятки кас, сотні веб-сторінок пізніше це просто не працює. У той же час, джерела, опубліковані symbolource.org, просто діють як принадність.
Wiktor Zychla

Відповіді:


35

PDB для переходу через вихідний код розміщуються лише для RTM та Service Packs. Таким чином, коли з'явиться оновлення безпеки, і воно модифікує DLL, який ви намагаєтеся налагодити, це призведе до того, що джерело не буде працювати (тобто ви отримаєте "Немає джерела в наявності" із сірим кольором "Перегляньте, щоб знайти джерело ").

Однак, зробивши всі відповідні налаштування, ви можете скористатись наступним способом вирішення. Похідне рішення полягає в тому, щоб знайти оновлення безпеки, які спричинили зміну dll, а потім видалити їх. Це має очевидний мінус: видалення цих оновлень безпеки на вашій машині.

Обхід

  1. Визначте, у який dll ви хочете налагодити (наприклад, System.Windows.Forms.dll)
  2. Під час налагодження відкрийте вікно Модулі в студії Visual, знайдіть Версію стовпець . Якщо версія не є версією RTM або Service Pack, тоді вам потрібно буде виконати робочий процес. Зазвичай RTL dll скаже "побудовано: RTMRel". У той час як DLL, який був частиною оновлення безпеки, скаже "побудовано: RTMGDR". Зверніть увагу на номер версії (наприклад, 4.0.30319.269, побудований: RTMGDR)
  3. Тепер ми хочемо знайти оновлення, яке створило цю версію. Зробіть це, шукаючи dll та номер версії на support.microsoft.com/kb/ Наприклад, я здійснив такий пошук у Google: site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269
  4. Пошук повинен з’явити інформацію про оновлення. Зверніть увагу на номер KB в адресному рядку. У моєму прикладі адреса була http://support.microsoft.com/kb/2604121таким, що нас цікавить KB2604121.
  5. Перейдіть до Панелі керування-> Програми та функції та натисніть «Переглянути встановлені оновлення»
  6. Знайдіть оновлення, в якому перераховано номер KB (ви можете скористатися пошуком у верхньому правому полі).
  7. Видаліть це оновлення.
  8. Повторіть цей процес для цього ж DLL, поки dll не повернеться до своєї версії RTMRel або SP. Наприклад, для System.Windows.Forms.dll мені довелося видалити KB2686827, KB2604121, KB2518870, перш ніж повернутися до версії RTMRel.

Вам потрібно буде зробити це для кожного dll в рамках .NET, до якого ви хочете відладкувати.

Після цього встановіть точку розриву в .net-джерелі (наприклад, перейдіть на вкладку "Точки переривання", скажіть "Новий"> "Перерва на функцію" та введіть System.Windows.Forms.Form.Form) або перейдіть до однієї з .net методи в цій dll.


1
Правильно, хитрість полягає у пошуку правильних для видалення (оскільки зазвичай їх встановлено дуже багато , і для видалення їх потрібно деякий час).
Метт Сміт

Я не можу видалити оновлення безпеки. Це проти політики компанії. Чи є спосіб отримати копії mscorlib.dll (та інших), які відповідають серверу Microsoft Symbols? Мій mscorlib.dll - це версія 4.0.30319.269 (RTMGDR.030319-2600). Можливо, я міг би тимчасово оновити GAC за допомогою цієї нової DLL і спробувати ступінь джерела.
kevinarpe

Мабуть, це проти моєї політики компанії - я просто переустановлюю їх після закінчення. Я не думаю, що ви могли просто запустити стару версію mscorlib.dll незалежно від інших dll, які повинні повернутись до неї (для того, щоб вона працювала належним чином). Крім того, тимчасове оновлення GAC старими dlls фактично було б рівнозначним тимчасовому видаленню оновлення безпеки.
Метт Сміт

Ймовірна причина, що Microsoft не випускає джерело для оновлень безпеки, полягає в тому, що хтось може порівняти зміни коду, зрозуміти, що таке вразливість безпеки, та створити власні подвиги. Microsoft не усвідомлює, що "вихідний код" вже доступний за допомогою ILSpy або Relfector. Тож Microsoft, не випускаючи вихідний код, насправді нікого не робить більш безпечним - просто розробникам життя важче.
Ян Бойд

2
@IanBoyd Я сумніваюся, що це мотивація MS. Я припускаю, що їх робочий процес просто не підтримує оновлення вихідного PDB для налагодження. В першу чергу вони стосувалися закриття отворів у безпеці.
xanadont

6

Хоча, на жаль, є проблема з Microsoft, як зазначив Леппі (і я отримав такий же результат

слід зауважити, що ваша спроба все-таки провалиться, оскільки ви посилалися на:

  • Сервер Microsoft Symbol

замість:

  • referencesource.microsoft.com/symbols

Див. Розділ FAQ / усунення несправностей Налаштування Visual Studio для налагодження .NET Framework Source Code


4

Думаю, я знайшов відповідь.

Я простежив, що відбувається на Фіддлері. Здається, наразі доступні лише символи, а джерела немає.

Коли VS намагається завантажити символи з сервера 'referenceource', це не вдається (404). Оскільки це не вдається, я думаю, що він не може відобразити вихідні файли на цьому сервері.

http://referencesource.microsoft.com/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pdb

Після вищевказаного збою він намагається якийсь сервер під назвою 'msdl', де він знаходить фактичну PDB (але, здається, у цього немає інформації про вихідний код).

http://msdl.microsoft.com/download/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pd_

Загалом, схоже, це проблема (тимчасова) Microsoft зі своїми серверами.

Я впевнений, що у мене був деякий вихідний код назад. Але зараз це не працює.

Редагувати:

Я спробував це з різними версіями .NET, все той же результат. :(


1
Ну , що було б дуже цікаво , якщо мої точні кроки повинні працювати (але не), буде працювати (в майбутньому), і зробити роботу (але не сьогодні). Це також було б надзвичайно засмучуючим, оскільки я витратив 11 годин на проблему.
Ян Бойд

2
msdl.microsoft.com, схоже, є Microsoft Symbol Server
yoel halb

2
і це знову зламано
Simon_Weaver

Здається, це не "тимчасова проблема сервера", через 7 років і посилання все ще мертві.
jrh


1

У моєму випадку я налагоджував старий додаток .NET 2.0 WinForms і отримав "Джерело недоступне" . Я спробував усі рекомендовані настройки.

Врешті-решт, я відновив додаток, щоб тимчасово націлити .NET 4.5 і зміг приступити до роботи джерела. Можливо, мій додаток був занадто старим, щоб перейти до джерела. Я знаю, що якимось чином перемагає мету, але для швидкого і брудного тестування це працює. Помилка у мене все ще присутня в .NET 4.5 . :)

Цільова рамка


0

Довідкове джерело можна знайти тут, доступне для завантаження:

Довідкове джерело .NET Framework 4.0

Джерела для WCF, WF і навіть 4.5 Beta / RC та багато іншого також можна знайти там:

Microsoft Referencesource NetFramework


3
Вихідний код марний без символів. Якщо ви не любите шукати конкретний фрагмент коду; p
leppie

0

Ось офіційні інструкції https://referencesource.microsoft.com/setup.html

Налаштування Visual Studio 2013 для налагодження .NET Framework

Для налаштування Visual Studio 2013 зробіть наступне в меню Інструменти -> Параметри -> Налагодження -> Загальне меню:

  • Вимкнути лише мій код
  • Вимкнути крок над властивостями та операторами
  • Для відключення потрібні вихідні файли, щоб вони точно відповідали оригінальній версії
  • Увімкніть кроковий вихідний код .NET
  • Увімкнути підтримку вихідного сервера

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.