Отладка ASP. Net Core символы и источник не совпадают - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь отследить проблему с MVC, поэтому я решил войти в исходный код ASP .NET Core. Я снял флажок «Включить только мой код» и проверил «Включить пошаговое выполнение исходного кода .NET Framework» (хотя, полагаю, это не обязательно). Я также проверил «Включить поддержку исходного сервера» и включил сервер символов Microsoft.

Я вхожу в эту строку

app.UseMvc();

и в итоге я получаю этот код в MvcApplicationBuilderExtensions.cs.

VerifyMvcIsRegistered(app);

var options = app.ApplicationServices.GetRequiredService<IOptions<MvcOptions>>();

if (options.Value.EnableEndpointRouting)
{

Проходя по этому коду, программный счетчик начинает перепрыгивать, и я получаю сообщение об ошибке, что некоторые локальные переменные не могут получить значение, потому что оно недоступно или было оптимизировано. Я предполагаю, что это потому, что исходный файл и файлы символов не совпадают.

Я запускаю это на Visual Studio 2019. Это .net Core 2.2.203. Я удалил кэш символов и кэш SourceServer. Я пытаюсь выяснить, что я сделал неправильно в своем коде и почему.

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

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Сообщение является точным и объясняет, что именно происходит.Это не имеет ничего общего с несовпадающими символами.

Проблема (не), как объясняется в сообщении, заключается в том, что IL был оптимизирован во время компиляции, эти переменные больше не существуют.Сборка выпуска выполняет много оптимизаций, которые обычно заканчивают тем, что удаляют части кода, которые не нужны.

Функции могут и довольно часто являются встроенными.Например, переменная может быть заменена регистром.Цикл может быть полностью исключен.Когда этот код запускается, переменных или функций больше нет, поэтому они не могут быть отображены.

Символы отладки все еще могут быть сгенерированы в сборке выпуска.Они будут отражать IL, сгенерированный для сборки релиза.Чтобы получить IL, соответствующий исходному тексту без каких-либо оптимизаций, нужны сборки, скомпилированные в конфигурации Debug.

Это верно для среды выполнения .NET Core, нашего собственного кода при запуске сборки Release и всех пакетов NuGet.

1 голос
/ 18 апреля 2019

Если вы хотите отлаживать исходный код .NET Core, вы можете загрузить его с github (https://github.com/dotnet/corefx). Его очень легко отлаживать, как и ваш собственный проект.

Есть очень хорошее видео, где объясняется, как работает жизненный цикл запроса .NET Core MVC (https://app.pluralsight.com/library/courses/aspnet-core-mvc-request-life-cycle/table-of-contents),, возможно, там вы найдете нужную вам информацию.

P.S. Вы можете получить 3 месяца бесплатно с помощью учетной записи Microsoft.

...