新コース「Windows Server 2008 R2トラブルシューティング(基礎編)」コースが8月15日(水)から始まります。
演習では、STOPエラーの簡単な解析や(本当に初歩の初歩ですが)、アプリケーションエラーの挙動を体験します。
STOPエラーを起こすのは難しいため、Sysinternalsのツール「NotMyFault」を使います。NotMyFaultについては拙ブログ「死の青い画面」で紹介しているので、こちらをどうぞ。
ユーザーモードのエラーは自分で作ろうと思い、Visual C++ Expressをダウンロードしてきました。他にもパフォーマンスモニターの演習用プログラムも必要だったので、以下の4本を作成しました。
- ゼロ除算と記憶保護例外を起こすWindows Formアプリケーション
- メモリを食いつぶすコマンドラインアプリケーション
- CPU時間を食いつぶすコマンドラインアプリケーション
- 何もしないダミーのアプリケーション
最近のコンパイラは、無意味な演算や変数を自動的に削除するので、最適化を抑制する必要があります。今回は変数に対してvolatile宣言を使いました。コンパイルオプションだと、あとで他の人が悩んでしまうかもしれませんので。
エラーを起こすアプリケーションは、1つで複数のエラーを起こすため、Windows Formを使ってボタンを並べました。
その他のアプリケーションは、ビルド後の実行ファイルにダミーデータを追加し、ファイルサイズを合わせ、ファイル名を変更しました。どういう風に使うのかは受講者だけの秘密です。
どれも数行から十数行のプログラムなのですぐにできましたが、受講者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のランタイムがインストールされています。