5

У меня рабочая станция HP Z440 (E5-1680v4 и 128 ГБ ОЗУ, BIOS 2.39 Rev.A), и я использую Visual Studio Professional 2013 (обновление 5). Операционная система Windows 7 64-разрядная.

Например, когда я использую Profiler из Visual Studio в проекте C #, он падает и перезагружает / перезагружает мой компьютер.

Следующие шаги воспроизводят проблему:

  1. Запустите ПК и откройте Visual Studio
  2. Создайте консольное приложение C # (.NET 4.0)
  3. Добавить Console.WritLine("Hello World :-("); к основному методу.
  4. Меню / Анализ / Производительность и Диагностика.
  5. Выборка процессора.
  6. Например, выберите проект HelloWorld .
  7. Вся информация, необходимая для создания сессий, была собрана.
  8. Нажмите « Finish (Lunch profiling after the wizard finishes проверку).
  9. Нажав на следующий диалог на да.
  10. Windows запрашивает учетные данные администратора, которые я могу предоставить ему.
  11. Я вижу вторую вкладку (* .vsp), показывающую Start the profiler . После этого компьютер вылетает и перезагружается / перезагружается .

Я вижу критическую ошибку в системном журнале после перезагрузки:

Система была перезагружена без точного выключения. Эта ошибка может быть вызвана тем, что система перестает отвечать, происходит сбой или неожиданное отключение питания.

Есть идеи, что происходит? В прошлом году (2017) я смог использовать Profiler из Visual Studio 2013 на том же ПК. Единственными вещами, которые были изменены, были Обновления Windows и BIOS (сделать Meltdown и Spectre).

Что я могу сделать, чтобы я снова смог профилировать свой код?

2 ответа2

5

Недавно MS предоставила настройки реестра для отключения патчей Spectre/Meltdown. Если профиль безопасности вашей среды разработки может соответствовать отключению этих исправлений, эти параметры позволят профилировщику снова работать:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 3 /f

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f

Перезагрузитесь, и профилировщик должен снова работать.

Источник: https://support.microsoft.com/en-us/help/4073119/protect-against-speculative-execution-side-channel-vulnerabilities-in

3

Это вызвано январскими обновлениями Windows. Похоже, это не будет исправлено, см. Следующие комментарии Аллена Денвера:

Мне очень жаль, что вы видите, что эта проблема возникает. Недавно выпущенное исправление безопасности для Windows 7 (исправление безопасности «Расплавление / Призрак») вызывает использование всех версий мастера производительности Visual Studio и утилиты командной строки VSPerfCMD при использовании в режиме выборки для перезагрузки компьютера без предупреждения или записей журнала событий. Эта проблема влияет только на выборку, когда она используется для сбора стеков памяти процессора или .Net. Режим Инструментов не затронут. Аналогично режим Contention также не подвержен влиянию. Операции профилирования, поддерживаемые в Windows 8+, также не подвержены этой проблеме.

Причиной этой проблемы является то, что ранее поддерживаемые операции, выполняемые профилировщиком выборки, больше не разрешены после исправления безопасности. Исправление безопасности изменило ядро ОС Windows 7 так, что используемый нами низкоуровневый код сбора данных приводит к перезагрузке компьютера. Никакой синий экран и никакие записи журнала событий не делаются, когда это происходит. Проблема возникает даже ниже, чем у этих средств ОС. Эта причина аналогична изменениям, которые были внесены в ядро ОС Windows в Windows 8, в результате чего мы значительно изменили Visual Studio Profiler для использования различных методов сбора данных профилирования выборки. Windows 8 запрещает метод сбора, используемый в Windows 7. Теперь с исправлением безопасности Windows 7 также запрещает эту технику.

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

У меня есть длинный документ, над которым я работаю, в котором подробно описываются обходные пути. Это слишком долго для одного поста здесь. Итак, я разобью его в нескольких ответах на эту запись. Я также опубликую ссылку на отдельный документ, когда у меня будет место для него в Интернете.

Аллен Денвер

Visual Studio

а также

Мы намерены выпустить патч, который позволит избежать перезапуска, запретив запуск сеанса сбора выборки. Это не "исправить", однако. У нас нет планов заставить работать Performance Explorer, Performance Wizard, VSPerfASPNetCMD или VSPerfCMD в Windows 7. Наш путь вперед - с помощью инструмента использования ЦП и центра диагностики (он же "Профилировщик производительности").

Источник: https://developercommunity.visualstudio.com/content/problem/177958/starting-the-profiler-leads-to-computer-restart-af.html

Обходной путь 1

Для Windows 7 и Visual Studio 2013 нет хорошего обходного пути, см. Комментарий Аллена Денвера:

Для VS2013 и более ранних версий Visual Studio вместо профилирования вы можете использовать метод Instrumentation.

Таким образом, вы больше не можете использовать режим выборки ЦП в Windows 7 и Visual Studio 2013.

Обходной путь 2

Я думаю, что переход на Windows 10 и Visual Studio 2017 - это то, что нужно, см. Также комментарий Аллена Денвера:

Профилирование Performance Wizard и Performance Explorer в Visual Studio 2017 с использованием метода выборки будет работать в Windows 10. В случае Win 8+ мы изменили коллектор, чтобы получать трассировки стека, используя другой набор функций ОС, а не наш собственный драйвер ядра.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .