連載:Visual Studioデバッグ手法 第2回 Visual Studio 2010の新機能「IntelliTrace」 亀川 和史2010/07/28 2011/02/17 更新(Visual Studio 2010 SP1対応) |
|
■IntelliTraceとは?
プログラムをテスト実行中に意図しない動作が発生した場合、どのような手順でその動作を検証・デバッグしているだろうか? 恐らく通常は、以下の手順で検証・デバッグしているのではないだろうか?
- 例外や、意図しない動作が発生する
- ソース・コード中の該当しそうなところを探し、ブレークポイントを設定する
- 再度同じ手順を実行する
ところが、この「同じ手順を実行する」ということが、従来のVisual Studioでは非常に厄介だった。例えば、非常に長い間操作した結果で発生したバグの場合、そのときまでに入力したデータや手順をすべて覚えていないかもしれない。そうすると、同じ手順を再現するのは難しい。
Visual Studio 2010 Ultimateに搭載された「IntelliTrace」(インテリトレース)という機能を使用すれば、この問題を解決してくれる。この機能は実行中の各種イベントなどを記録してくれるため、例外が発生した場合、その記録データから、例外発生時点の状態まで巻き戻してその例外を確認でき、非常に効率的なデバッグが可能となる。
ただし、IntelliTraceは強力なデバッグ機能なのだが、使用するには以下の注意点がある。
- マネージ・コードであること(アンマネージ・コードでは使えない)
- x86で生成されていなくてはならない(64bit Windowsでの「Any CPU」やx64プロジェクトではVisual Studio 2010 SP1を適用する必要がある)
- Visual Studioから「デバッグ実行」したプログラムであること。つまり、すでに起動しているプログラムに対して「プロセスにアタッチ」したデバッグやリモート・デバッグでは使用できない
- Silverlightアプリケーション、Xboxアプリケーション、Windows Mobileアプリケーション、スクリプト言語、SQL CLRプロジェクトはサポートされていない
- F#プロジェクトでは実験的なサポートにとどまる
- 32bit OSでWindows AzureのIntelliTraceのログを参照するためには、KB983301のパッチ(=修正プログラム)が必要となる(このパッチはVisual Studio 2010 SP1には含まれている)。KB983301のパッチは「Code Gallery:KB983301 - Intellitrace hotfix to address issues outlined in Cloud Tools」(英語)からダウンロードできる
Visual Studio 2010 SP1では、64bit対応したことで、SharePointアプリケーションもサポートされる。SP1でのIntelliTrace以外の変更点は「MSDN:Visual Studio 2010 SP1 の新機能」にまとめられているので、参考にしてほしい。
これらの注意点を見て「使用条件が厳しい」と思うかもしれないが、それでもIntelliTraceを使う価値は十分にあるし、マネージド・コードのプロジェクトで、[F5]キーを押してデバッグ実行できるものであれば問題ないだろう。Visual Studio 2010 UltimateではIntelliTraceが有効状態で設定されているため、通常どおりデバッグ実行を行えばよい。
IntelliTraceが有効である場合、例外が発生したり、ブレークポイントで停止させたりすると、IntelliTraceビューが表示される。注意点として、IntelliTraceの初期設定ではアプリケーションの完全な実行履歴は得られないため、必要に応じて[オプション]ダイアログのツリー表示の[IntelliTrace]から[IntelliTrace イベントと呼び出し情報]を設定する必要がある。次の画面は、その例だ。
完全な実行履歴を得るための[オプション]ダイアログの設定 |
既定では[IntelliTrace イベントのみ]が選択されている。呼び出し情報まで取得する場合、[IntelliTrace のイベントと呼び出し情報]を選択する。これにより、次回のデバッグから詳細な情報が採取できるようになる。ただし、エディット・コンティニュー機能が使用できなくなる。 |
IntelliTraceであらかじめ定義されている採取イベントは以下のとおりである。△はイベントのうち一部が定義されている状態を表している。
イベント | 初期採取 | 説明 |
ADO.NET | ○ | ADO.NETのイベントを記録する |
ASP.NET | ○ | ASP.NETのイベントを記録する |
コンソール | × | コンソール表示イベントを記録する |
データ バインド | × | データ・バインドの完了イベントを記録する |
環境変数 | × | 環境変数の取得および、評価イベントを記録する |
ファイル | × | ファイルの読み書きイベントを記録する |
ジェスチャ | △ | Webフォーム/Windowsフォーム/WPF上のコントロール操作に関する操作イベントを記録する |
遅延初期化 | × | 遅延読み込みされた変数の初期化イベントを記録する |
レジストリ | × | レジストリ・キーおよび値の読み書きを記録する |
ServiceModel | △ | WCFからのWebサービス・イベントを記録する |
スレッド | × | キューおよび、タスクのイベントを記録する |
トレース | × | アサーション、Trace Write/WriteLine/formatのイベントを記録する |
ユーザー プロンプト | ○ | Windowsフォーム、WPFのMessageBox関係のイベントを記録する |
ワークフロー | ○ | ワークフロー・アクティビティの開始/終了を記録する |
XML | ○ | XMLドキュメントの読み込みイベントを記録する |
IntelliTraceであらかじめ定義されている採取イベント |
これらの採取イベントは、次の画面のように[オプション]ダイアログのツリー表示の[IntelliTrace]−[IntelliTrace イベント]から有効/無効を切り替えられるので、必要に応じて変更してほしい。
採取イベントの有効/無効を切り替えるための[オプション]ダイアログの設定 | ||||||
[オプション]ダイアログのツリー表示の[IntelliTrace]−[IntelliTrace イベント]から、採取イベントの有効/無効を切り替えられる。 | ||||||
|
IntelliTraceの情報はログ・ファイルの形でハード・ディスクに記録されている。記録対象のハード・ディスクの容量が少ない場合、次の画面のように[オプション]ダイアログのツリー表示の[IntelliTrace]−[詳細]から変更すればよい。ログ・ファイルの保存先のフォルダを変更する場合、その保存先のNTFSセキュリティの設定に注意しないと、IntelliTraceログ・ファイルの書き込みに失敗する可能性がある。
このログ・ファイルはVisual Studioを終了するタイミングで自動的に削除される。従って、ファイルがずっと残り続けることはないので、安心してほしい。
IntelliTraceを使用する場合、もう1つ注意しておきたい設定がある。通常、Visual Studioでのデバッグでは、高速化や部分信頼モジュールのデバッグのため、Visual Studioホスティング・プロセスを使用している(参考:「
.NET TIPS:VSホスト・プロセス(*.vshost.exe)とは何か?」「.NET TIPS:.vshost.exeファイルと.pdbファイルが生成されないようにするには?」)。
Visual StudioからのIntelliTrace実行では、ホスティング・プロセスを使用していても動作はするが、以下の問題があるためお勧めできない。
(1)IntelliTraceが実行中に採取するログの概要(拡張子「.iTrace」のファイル)を表示できない
(2).iTraceファイルを表示しても(通常の.EXEファイルではなく)Visual Studioホスティング・プロセスの情報を表示してしまう
この2点について、より詳しく説明しよう。
まず、Visual Studioホスティング・プロセスを有効にした状態でIntelliTraceによるデバッグを実行した場合も、[オプション]ダイアログで指定した[IntelliTrace 記録の場所](=ログ・ファイルの保存先のフォルダ)に.iTraceファイルが作成される。しかし、メニューバーの[デバッグ]−[IntelliTrace]の配下にある[ログの概要の表示]は、グレーアウトしたままで選択することができない(次の画面を参照)。
Visual Studioホスティング・プロセスが有効な状態でのIntelliTrace実行では、[ログの概要の表示]が実行できない |
次に、[オプション]ダイアログで指定した[IntelliTrace 記録の場所](=初期値では「C:\ProgramData\Microsoft Visual Studio\10.0\TraceDebugging」)にある.iTraceファイルをVisual StudioのIDEで開くと、以下の画面のように表示される。ただし、Visual Studioホスティング・プロセス経由なので、ファイル名の一部に「.vshost」が付いている(例えば「WindowsApplication1.vshost_100604_164922.iTrace」のようなファイル名)。
Visual Studioホスティング・プロセス有効状態で実行したIntelliTraceログの概要ファイル |
この例では、Visual Studioホスティング・プロセスが生成していたと思われるワーカー・スレッドがあるのが分かる。 |
一方、Visual Studioホスティング・プロセスを無効にした場合、次の画面のようにメニューバーの[デバッグ]−[IntelliTrace]−[ログの概要の表示]が有効になり、Visual Studioから直接、IntelliTraceログの概要ファイルを開くことができる。
Visual Studioホスティング・プロセスが無効な状態でのIntelliTrace実行では、[ログの概要の表示]が実行できる |
次の画面は、実際に[ログの概要の表示]を実行したところ。
Visual Studioホスティング・プロセスを無効にした場合のIntelliTraceログの概要ファイル | |||
こちらでは、Visual Studioホスティング・プロセスが生成していたと思われるワーカー・スレッドなどは生成されていない。 | |||
|
両者の違いとしては、Visual Studioホスティング・プロセスを有効にした場合に、ユーザー・コードには存在しないワーカー・スレッド(=3つ前の画像「Visual Studioホスティング・プロセス有効状態で実行したIntelliTraceログの概要ファイル」で赤枠で囲んだ部分)などまで記録されることである。このように自コードに組み込んでいないワーカー・スレッドなどが記録されることで、解析が混乱してしまうことが考えられる。
従って、IntelliTraceを使用する場合、Visual Studioホスティング・プロセスを使用しないようにしておこう。
IntelliTraceログの概要ファイルの利用方法は、参照できるだけではない。オレンジ色の縦棒の部分(上記の画面の)をクリックすると、そのままデバッグを開始することができる。また、チーム開発用のサーバ製品であるTeam Foundation Serverなどにバグを登録する際、.iTraceファイルを添付すれば、修正担当者側でそのままライブ・デバッグ(=現在実行中のデバッグ)を開始して、エラーになった状態を手元で再現できる。
従来の開発作業において、どんなに再現手順を詳細に書いたとしても「再現しない」で終わっていた経験を持っている人も多くいるだろう。IntelliTraceの.iTraceファイルは再現したタイミングそのものの情報なので、相手側でもデバッグが可能になる。そのため、再現させるために行うやり取りは少なくなるだろう。
以降では、IntelliTraceを使ったデバッグの実践方法を説明していく。
INDEX | ||
[連載]Visual Studioデバッグ手法 | ||
第2回 Visual Studio 2010の新機能「IntelliTrace」 | ||
1. IntelliTraceとは? | ||
2. IntelliTraceでのデバッグ実践 | ||
3. チーム開発におけるIntelliTrace | ||
4. Windows AzureとIntelliTrace | ||
「連載:Visual Studioデバッグ手法」 |
更新履歴 | |
|
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|
- - PR -