пятница, 3 февраля 2017 г.

отладка в исходниках библиотеки .net и Asp.net mvc

в исходниках стандартной библиотеки
Что делать, если я захотел пройтись отладчиком , например, по реализации List<T>.Add?
(Все это я опробоввал на Visual Studio 2015 Community Edition)
*кажется, в экспресс-версиях Студии отладка исходников не поддерживается

принцип такой:
1) для модуля, в котором лежит релизация метода, в который мы хотим зайти, должен быть загружен PDB-файл, который содержит информацию по соответствию линий исходного кода группам инструкций исполняемого бинарника
2) должен быть, собственно исходник, в котором находится объявление
 чтоб это получилось - нужно изменить настройки, как показано здесь:
https://referencesource.microsoft.com/setup.html

кроме того, нужно зайти в настройки "Debugging - Symbools", поставить галочку "Microsoft Symbol Servers". так же должен быть отмечен пункт "Only specified modules"

после этого нужно закрыть/откыть Visual Studio, чтоб настройки вступили в силу
если вместо Only specified modules включить опцию "All modules unless excluded" - при старте приложения с интернета будут закачиваться PDBшки всех модулей. а это - долго, у меня не хватает терпения ждать. кстати, при запуске отладки Студия почему-то , все же, пытается качать что-то - я просто отмену жму

*чтоб вернуть все обратно и не заходить в реализацию сторонних модулей - нужно включить "Enable just My Code" и в "Symbols"  выбрать "Only specified modues"

так вот, доходим до строки, в коорую хотим нырнуть, отладчиком
выясняем, в какой ДЛЛке находится нужный нам код
в окне Modules правой кнопкой по ДЛЛке, "Load symbols info" - в соотв. строке должна отобразиться инфа, что символы загружены. кстати, там же есть пункт "всегда загружать символы"
(еще можно загрузить символы через контекстное меню окна стека вызовов)

все, жмем F11 - проваливаемся в реализацию метода

*перед публикацией попробовал еще раз - не получилось провалиться в mscorlib :(((
загружаешь символы для этого модуля, в стеке вызовов даблкликаешь на строчку из этого модуля - выходит окошко "Source Not Available" :(
я поузнавал: есть несколько майкрософтовских серверов символов. из низ , в частности, http://referencesource.microsoft.com - клевый, выдает PDB с информацией об исходниках.
а https://msdl.microsoft.com/download/symbols - чмошный, без исходников.
и, вот, судя по информации о загрузке символов (модули- правый клик - Symbol Load Information) PDBшка качается с https://msdl.microsoft.com/download/symbols :(
проблема в том, что на серверах майкрософт нет нормальных PDB для моей версии mscorlib
но клянусь честью, как минимум раз я дебажил Console.WriteLine (видимо, тогда звезды и версии библиотек сошлись удачнее)



отладка ASP.NET MVC

тут - свои нюансы.
первое - PDB не скачивается со стандартных серверов символов Майкрософт. решается так: настройки "Debugging - Symbools" - в список серверов добавляется пункт "http://srv.symbolsource.org/pdb/Public"

ок, останавливаемся на точке останова, загружаем символы для модуля, жмем F11... и тут 1) либо вы провалитесь не в реальны исходник, а в автосгенерированный файл с сигнатурами - в этом случае вам нужно просто удалить этот файл и повторить процедуру
2) либо Студия попросит указать ей, где лежат, собственно, исходники.

и вот тут - вторая часть Марлезонского балета.

смотрим версию asp.net MVC в packages.config
например, 5.2.2

http://aspnetwebstack.codeplex.com/wikipage?title=Repository%20Tags%20and%20Version%20Numbers -  ищем соответствующую ей версию внутри гит-репозитория (типа, имя ветки)  - 3.2.2

https://aspnetwebstack.codeplex.com/SourceControl/latest - клонируем этот Git-репозиторий (кто не умеет работать с гитом - http://google.com :))

переключаемся на тег с нашей версией - (V3.2.2)

все, это - исходники. найдите среди них файл, который запрашивает Студия, и отладка пошла

версию исходников можно посмотреть в CommonAssemblyInfo.cs