HP Z440ワークステーション(E5-1680v4および128 GB RAM、BIOS 2.39 Rev.A)を使用しており、Visual Studio Professional 2013(Update 5)を使用しています。オペレーティングシステムはWindows 7 64ビットです。
たとえば、C#プロジェクトでVisual Studioのプロファイラーを使用していると、プロファイラーがクラッシュし、PCが再起動/再起動します。
次の手順は、問題を再現します。
Console.WritLine("Hello World :-(");
を追加します。HelloWorld
を選択します。Finish
をクリックします(Lunch profiling after the wizard finishes
チェック済み)。Start the profiler
を示す2番目のタブページ(* .vsp)を見ることができます。その後、PCがクラッシュして再起動/再起動します。再起動後、システムログに重大なエラーが表示されます。
システムは、最初に完全にシャットダウンせずに再起動しました。このエラーは、システムが応答を停止したり、クラッシュしたり、予期せず電源が失われた場合に発生する可能性があります。
何が起こるか考えはありますか?昨年(2017)同じパソコンでVisual Studio 2013のProfilerを使用することができました。変更されたのは、Windows UpdateとBIOS(MeltdownとSpectreを実行)だけでした。
コードのプロファイルを再度作成できるようにするにはどうすればよいですか?
最近、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
再起動すると、プロファイラーが再び動作します。
これは、1月のWindowsUpdateが原因です。これは修正されないようです。AllenDenverからの次のコメントを参照してください。
この問題が発生していることをお詫び申し上げます。最近リリースされたWindows7のセキュリティパッチ(「Meltdown/Spectre」セキュリティパッチ)により、すべてのバージョンのVisual Studio Performance WizardおよびVSPerfCMDコマンドラインユーティリティをサンプリングモードで使用すると、再起動します警告またはイベントログエントリのないコンピュータ。この問題は、CPUまたは.Netメモリ割り当てスタックの収集に使用された場合のサンプリングにのみ影響します。インストルメンテーションモードは影響を受けません。同様に、競合モードも影響を受けません。Windows8以降でサポートされているプロファイリング操作も影響を受けません。この問題によって。
この問題の原因は、サンプリングプロファイラーによって実行されていた以前にサポートされていた操作が、セキュリティパッチの後で許可されなくなったことです。 Windows 7 OSカーネルを変更したセキュリティパッチは、私たちが使用する低レベルのデータ収集コードがマシンを再起動させるような方法です。これが発生した場合、ブルースクリーンやイベントログエントリは作成されません。問題は、OSのこれらの機能よりもさらに低く発生します。この原因は、Windows 8のWindows OSカーネルに加えられた変更に似ています。これにより、Visual Studio Profilerを大幅に変更して、さまざまな手法を使用してサンプリングプロファイリングデータを収集しました。 Windows 8では、Windows 7で使用されていた収集手法が禁止されました。現在、セキュリティパッチにより、Windows 7でもこの手法が許可されていません。
幸い、私が推奨できるいくつかの回避策があります。これらの回避策は完全ではありません。それらにはギャップを埋めるために将来迅速に対処したいと考えている制限がありますが、これらはギャップを埋めるために作業している間に少なくともいくつかのパフォーマンスプロファイリングを実行するために利用できます。
回避策を詳細に説明している、作業中の長いドキュメントがあります。ここでの単一の投稿には長すぎます。そのため、このエントリに対する複数の応答に分割します。また、Web上の場所がある場合は、単一のドキュメントへのリンクも投稿します。
アレンデンバー
Visual Studio
そして
サンプリング収集セッションの開始を禁止することにより、再起動動作を回避するパッチをリリースする予定です。ただし、これは「修正」ではありません。 Windows 7でパフォーマンスエクスプローラー、パフォーマンスウィザード、VSPerfASPNetCMD、またはVSPerfCMDサンプリングを機能させる予定はありません。今後は、CPU使用率ツールと診断ハブ(別名「パフォーマンスプロファイラー」)を使用します。
回避策1
Windows7およびVisualStudio 2013の場合、適切な回避策はありません。AllenDenverからのコメントを参照してください。
VS2013およびそれ以前のバージョンのVisualStudioの場合、代わりにプロファイリングにインストルメンテーションメソッドを使用できます。
そのため、Windows7およびVisualStudio2013でCPUサンプリングモードを使用することはできなくなりました。
回避策2
Windows 10とVisual Studio 2017に切り替えるのがいいと思います。AllenDenverのコメントもご覧ください。
サンプリング手法を使用したVisualStudio2017のパフォーマンスWizardおよびPerformanceExplorerプロファイリングはWindows10で機能します。Win8以降の場合、別のセットを使用してスタックトレースを取得するようにコレクターを変更しました。独自のカーネルドライバーではなく、OS機能の.