2012年8月10日金曜日

Windows Server 2008 R2トラブルシューティング(基礎編)

新コース「Windows Server 2008 R2トラブルシューティング(基礎編)」コースが8月15日(水)から始まります。

演習では、STOPエラーの簡単な解析や(本当に初歩の初歩ですが)、アプリケーションエラーの挙動を体験します。

STOPエラーを起こすのは難しいため、Sysinternalsのツール「NotMyFault」を使います。NotMyFaultについては拙ブログ「死の青い画面」で紹介しているので、こちらをどうぞ。

ユーザーモードのエラーは自分で作ろうと思い、Visual C++ Expressをダウンロードしてきました。他にもパフォーマンスモニターの演習用プログラムも必要だったので、以下の4本を作成しました。

  • ゼロ除算と記憶保護例外を起こすWindows Formアプリケーション
  • メモリを食いつぶすコマンドラインアプリケーション
  • CPU時間を食いつぶすコマンドラインアプリケーション
  • 何もしないダミーのアプリケーション

最近のコンパイラは、無意味な演算や変数を自動的に削除するので、最適化を抑制する必要があります。今回は変数に対してvolatile宣言を使いました。コンパイルオプションだと、あとで他の人が悩んでしまうかもしれませんので。

エラーを起こすアプリケーションは、1つで複数のエラーを起こすため、Windows Formを使ってボタンを並べました。

UserError

その他のアプリケーションは、ビルド後の実行ファイルにダミーデータを追加し、ファイルサイズを合わせ、ファイル名を変更しました。どういう風に使うのかは受講者だけの秘密です。

どれも数行から十数行のプログラムなのですぐにできましたが、受講者PC環境に持っていくとうまく動きません。

Windows Formアプリケーションは、NET Framework 4.0がないので動作しない、コマンドラインアプリケーションはVIsaul C++のランタイムライブラリがないので動作しない、ということです。

仕方がないので、受講者PCに両者をインストールしました。

ランタイムはともかく、.NETのバージョンはビルド時に変更できるはずなんですが、やり方が分かりません。Twitterでつぶやいたところ、マイクロソフトMVPの小野さんはじめ、何人かの方からアドバイスをいただきました。

この時、間違えて「C#」と書いてしまっために、特に小野さんにはかなりのご迷惑をおかけしました。改めてお詫びします。

結局、C#やVBはVisual Studioから変更できるが、C++は構成ファイルをエディタで編集しなければならない、ということでした。

実際に構成してみると、確かに「対象フレームワーク」が変更されます。

そこでビルドしてみたら以下のエラー

.NET Framework 2.0/3.0/3.5 は、v90 のプラットフォーム ツールセットを対象としています

VIsual Studio 2008を使え、ということのようです。

そういうわけで、演習環境には.NET 4.0とVIsual Studio 2010のランタイムがインストールされています。