アプリケーションのトレースとインストルメントTracing and Instrumenting Applications

トレースとは、実行中のアプリケーションの実行状態を監視する方法です。Tracing is a way for you to monitor the execution of your application while it is running. .NET Framework アプリケーションの開発時に、トレースとデバッグのインストルメンテーションをアプリケーションに追加できます。このインストルメンテーションは、アプリケーションの開発中でも開発したアプリケーションの配置後でも使用できます。You can add tracing and debugging instrumentation to your .NET Framework application when you develop it, and you can use that instrumentation both while you are developing the application and after you have deployed it. System.Diagnostics.TraceSystem.Diagnostics.Debug、および System.Diagnostics.TraceSource の各クラスを使用すると、エラーおよびアプリケーションの実行についての情報を後で分析するために、ログ、テキスト ファイル、またはその他のデバイスに記録できます。You can use the System.Diagnostics.Trace, System.Diagnostics.Debug, and System.Diagnostics.TraceSource classes to record information about errors and application execution in logs, text files, or other devices for later analysis.

ここでのインストルメンテーションという用語は、製品のパフォーマンスのレベルを監視または測定し、エラーを診断する具体的な機能を意味しています。The term instrumentation refers to an ability to monitor or measure the level of a product's performance and to diagnose errors. プログラミングでは、組み込むアプリケーションの機能を指します。In programming, this means the ability of an application to incorporate:

  • コードのトレース - 実行時に、アプリケーションの実行状態について示すメッセージを受け取ります。Code tracing - Receiving informative messages about the execution of an application at run time.

  • デバッグ - 開発中のアプリケーションのプログラミング エラーを追跡して修正します。Debugging - Tracking down and fixing programming errors in an application under development. 詳細については、「デバッグ」を参照してください。For more information, see Debugging.

  • パフォーマンス カウンター - アプリケーションのパフォーマンスを追跡するためのコンポーネントです。Performance counters - Components that allow you to track the performance of your application. 詳細については、「パフォーマンス カウンター」を参照してください。For more information, see Performance Counters.

  • イベント ログ - アプリケーションの実行中に発生した重要なイベントを受け取って追跡するためのコンポーネントです。Event logs - Components that allow you receive and track major events in the execution of your application. 詳細については、EventLog クラスを参照してください。For more information, see the EventLog class.

トレース ステートメントをコード内に計画的に配置することによってアプリケーションをインストルメントすることは、分散アプリケーションでは特に便利です。Instrumenting your application by placing trace statements at strategic locations in your code is especially useful for distributed applications. トレース ステートメントを使用してアプリケーションをインストルメントすると、不適切な動作についての情報を表示できるだけでなく、アプリケーションの実行状態を監視するための情報も表示できます。By using trace statements you can instrument an application not only to display information when things go wrong, but also to monitor how well the application is performing.

TraceSource クラスは拡張されたトレース機能を備えており、以前の Trace トレース クラスと Debug トレース クラスの静的メソッドの代わりに使用できます。The TraceSource class provides enhanced tracing features and can be used in place of the static methods of the older Trace and Debug tracing classes. 従来の Trace クラスと Debug クラスも引き続き広く使用されますが、TraceEventTraceData などの新しいトレース コマンドには TraceSource クラスが推奨されます。The familiar Trace and Debug classes are still widely used, but the TraceSource class is recommended for new tracing commands, such as TraceEvent and TraceData.

TraceDebug はほぼ同一のクラスですが、Trace クラスのプロシージャおよび関数は既定でリリース ビルドにコンパイルされる点が Debug クラスのプロシージャおよび関数と異なります。The Trace and Debug classes are identical, except that procedures and functions of the Trace class are compiled by default into release builds, but those of the Debug class are not.

Trace クラスおよび Debug クラスは、アプリケーションの開発中または配置後に、アプリケーションのパフォーマンスをモニターおよび検査する手段を提供します。The Trace and Debug classes provide the means to monitor and examine application performance either during development or after deployment. たとえば、(新しいデータベース接続の作成など) が配置されたアプリケーションの操作の特定の種類を追跡するために Trace クラスを使用すると、アプリケーションの効率を監視できるようになります。For example, you can use the Trace class to track particular types of actions in a deployed application as they occur (for example, creation of new database connections), and can therefore monitor the application's efficiency.

コードのトレースとデバッグCode Tracing and Debugging

開発時に、Visual Studio 統合開発環境 (IDE) の出力ウィンドウにメッセージを表示するために Debug クラスの出力メソッドを使用できます。During development, you can use the output methods of the Debug class to display messages in the Output window of the Visual Studio integrated development environment (IDE). 例えば:For example:

Trace.WriteLine("Hello World!")  
Debug.WriteLine("Hello World!")  
System.Diagnostics.Trace.WriteLine("Hello World!");  
System.Diagnostics.Debug.WriteLine("Hello World!");  

いずれの例でも、デバッガーでEach of these examples will display "Hello World!" アプリケーションを実行したとき、出力ウィンドウに "Hello World!" が表示されます。in the Output window when the application is run in the debugger.

これにより、アプリケーションをデバッグし、テスト環境での動作に基づいてアプリケーションのパフォーマンスを最適化できます。This enables you to debug your applications and optimize their performance based on their behavior in your test environment. すべてのデバッグ出力を受け取ることができるよう、Debug 条件属性をオンにしてデバッグ ビルドでアプリケーションをデバッグできます。You can debug your application in your debug build with the Debug conditional attribute turned on so that you receive all debugging output. アプリケーションのリリースの準備が整ったら、コンパイラが最終的な実行可能ファイルにデバッグ コードを含めないように Debug の条件属性をオンにしないでリリース ビルドをコンパイルできます。When your application is ready for release, you can compile your release build without turning on the Debug conditional attribute, so that the compiler will not include your debugging code in the final executable. 詳細については、「方法 :トレースとデバッグを指定して条件付きコンパイルを実行するFor more information, see How to: Compile Conditionally with Trace and Debug. アプリケーションのさまざまなビルド構成の詳細については、「Compiling and Building」(コンパイルとビルド) を参照してください。For more information on different build configurations for your application, see Compiling and Building.

Trace クラスのメソッドを使用してインストールされたアプリケーションのコード実行をトレースすることもできます。You can also trace code execution in an installed application, using methods of the Trace class. コードにトレース スイッチを配置することで、トレースが実行されるかどうかと、その対象範囲について、制御することができます。By placing Trace Switches in your code, you can control whether tracing occurs and how extensive it is. これにより、運用環境におけるアプリケーションのステータスを監視できます。This lets you monitor the status of your application in a production environment. 複数のコンポーネントが複数のコンピューターで実行されるビジネス アプリケーションでは、この監視が特に重要です。This is especially important in a business application that uses multiple components running on multiple computers. 配置後のスイッチの機能は、構成ファイルで制御できます。You can control how the switches are used after deployment through the configuration file. 詳細については、「方法 :トレーススイッチを作成、初期化、および構成します。For more information, see How to: Create, Initialize and Configure Trace Switches.

トレースを使用するアプリケーションの開発時には、通常、アプリケーション コードにトレース メッセージとデバッグ メッセージの両方を組み込みます。When you are developing an application for which you intend to use tracing, you usually include both tracing and debugging messages in the application code. アプリケーションを配置する準備が整ったら、Debug 条件属性をオンにせずに、リリース ビルドをコンパイルできます。When you are ready to deploy the application, you can compile your release build without turning on the Debug conditional attribute. ただし、Trace 条件属性をオンにして、コンパイラがトレース コードを実行可能ファイルに組み込むようにすることもできます。However, you can turn on the Trace conditional attribute so that the compiler includes your trace code in the executable. 詳細については、「方法 :トレースとデバッグを指定して条件付きコンパイルを実行するFor more information, see How to: Compile Conditionally with Trace and Debug.

コードのトレースの段階Phases of Code Tracing

コードのトレースには、次の 3 つの段階があります。There are three phases of code tracing:

  1. インストルメンテーション - トレース コードをアプリケーションに追加します。Instrumentation — you add trace code to your application.

  2. トレース - トレース コードが、指定された場所に情報を書き込みます。Tracing — the tracing code writes information to the specified target.

  3. 分析 - トレース情報を分析して、アプリケーションの問題を識別および理解します。Analysis — you evaluate the tracing information to identify and understand problems in the application.

既定の設定では、開発中は、すべてのデバッグ出力メソッドおよびトレース出力メソッドが、Visual Studio の出力ウィンドウに情報を書き込みます。During development, all debug and trace output methods write information to the Output window in Visual Studio by default. 配置後のアプリケーションでは、メソッドは指定された場所にトレース情報を書き込みます。In a deployed application, the methods write tracing information to the targets you specify. トレースまたはデバッグの出力対象を指定する詳細については、「トレース リスナー」を参照してください。For more information on specifying an output target for tracing or debugging, see Trace Listeners.

配置されたアプリケーションで起こりうる問題を、トレースを使用して分析したり修正したりするためにしばしば使用される主要な手順を次に示します。The following is an overall view of the major steps typically involved in using tracing to analyze and correct potential problems in deployed applications. これらの手順を実行する方法の詳細については、適切なリンクを参照してください。For more information on how to perform these steps, see the appropriate link.

アプリケーションでトレースを使用するにはTo use tracing in an application
  1. アプリケーションを配置した後で受け取るトレース出力の種類を検討します。Consider which tracing output you will want to receive onsite after you have deployed the application.

  2. スイッチのセットを作成します。Create a set of switches. 詳細については、「方法 :トレーススイッチを構成します。For more information, see How to: Configure Trace Switches.

  3. アプリケーションのコードにトレース ステートメントを追加します。Add the trace statements to the application code.

  4. トレース出力を表示する場所を決定し、適切なリスナーを追加します。Determine where you want the tracing output to appear and add the appropriate listeners. 詳細については「トレース リスナーの作成と初期化」を参照してください。For more information, see Creating and Initializing Trace Listeners.

  5. アプリケーションおよびそのアプリケーションに含まれるトレース コードをテストおよびデバッグします。Test and debug your application and the tracing code it contains.

  6. 次のいずれかのプロシージャを使用して、アプリケーションを実行可能なコードにコンパイルします。Compile the application into executable code using one of the following procedures:

    • ソリューション エクスプローラー[プロパティ ページ] ダイアログ ボックスの [デバッグ] ページで [ビルド] メニューを使用します。Use the Build menu along with the Debug page of the Property Pages dialog box in Solution Explorer. Visual Studio でコンパイルをする場合は、この方法を使用してください。Use this when compiling in Visual Studio.

      - または -- or -

    • コマンド ラインによるコンパイル用の Trace コンパイラ ディレクティブおよび Debug コンパイラ ディレクティブを使用します。Use the Trace and Debug compiler directives for the command-line method of compiling. 詳細については、「トレースとデバッグによる条件付きコンパイル」を参照してください。For more information, see Compiling Conditionally with Trace and Debug. コマンド ラインからコンパイルする場合はこの方法を使用してください。Use this when compiling from the command line.

  7. 問題が実行時に発生する場合は、適切なトレース スイッチをオンにしてください。If a problem occurs during run time, turn on the appropriate trace switch. 詳細については、「トレース スイッチを設定する」を参照してください。For more information, see Configuring Trace Switches.

    トレース コードは、指定された場所 (画面、テキスト ファイル、イベント ログなど) にトレース メッセージを書き込みます。The tracing code writes tracing messages to a specified target, for example, a screen, a text file, or an event log. Trace.Listeners コレクションに含めたリスナーの種類によって、この場所が決定されます。The type of listener you included in the Trace.Listeners collection determines the target.

  8. トレース メッセージを分析して、アプリケーションの問題を識別および理解します。Analyze the tracing messages to identify and understand the problem in the application.

トレースの実装および分散アプリケーションTrace Instrumentation and Distributed Applications

分散アプリケーションを作成するときに、アプリケーションが使用される環境でテストをすることが難しい場合があります。When you create a distributed application, you might find it difficult to test the application in the manner in which it will be used. オペレーティング システムや Web ブラウザーのすべての組み合わせ (ローカライズ言語オプションのすべてのケースも含む) をテストしたり、アプリケーションに同時にアクセスする最大ユーザー数をシミュレートしたりできる開発チームはほとんどありません。Few development teams have the capability to test all possible combinations of operating systems or Web browsers (including all the localized language options), or to simulate the high number of users that will access the application at the same time. このため、大量の情報、異なる設定、エンド ユーザー固有の動作などの要因に対して分散アプリケーションがどのように応答するかをテストすることはできません。Under these circumstances, you cannot test how a distributed application will respond to high volumes, different setups, and unique end-user behaviors. また、分散アプリケーションを構成する要素の大半には、直接対話したりこれらの構成要素の利用状況を表示したりするためのユーザー インターフェイスは備わっていません。Also, many parts of a distributed application have no user interface with which you can interact directly or view the activity of those parts.

ただし、アプリケーションの実装 (つまりコード内にトレース ステートメントを計画的に配置すること) によって、分散アプリケーションが特定のイベント、特に不当な動作をシステム管理者に説明できるようにすることにより補うことができます。However, you can compensate for this by enabling distributed applications to describe certain events of interest to system administrators, especially things that go wrong, by instrumenting the application — that is, by placing trace statements at strategic locations in your code. これにより、予測不可能な動作 (極度に遅い応答時間など) が実行時に発生した場合でも、原因を判断できます。Then if something unexpected occurs at run time (for example, excessively slow response time), you can determine the likely cause.

トレース ステートメントを使用すると、オリジナル ソース コードを検査、変更、および再コンパイルしたり、デバッグ環境で実行時エラーを生成したりするなど、困難なタスクを避けることができます。With trace statements you can avoid the difficult task of examining the original source code, modifying it, recompiling, and attempting to produce the run-time error within the debugging environment. アプリケーションの実装は、エラーの表示だけでなく、パフォーマンスを監視するためにもすることができます。Remember that you can instrument an application not only to display errors, but also to monitor performance.

トレース ステートメントの計画的な配置Strategic Placement of Trace Statements

実行時に使用するトレース ステートメントを配置するときには、十分に注意する必要があります。You must exercise special care when placing your trace statements for use during run time. 考えられるすべてのトレース シナリオが適切に処理されるように、配置されるアプリケーションで必要とされるトレース情報を考慮する必要があります。You must consider what tracing information is likely to be needed in a deployed application, so that all likely tracing scenarios are adequately covered. しかし、トレースを使用するアプリケーションは多岐にわたっており、トレースの計画的な配置にあたっての一般的なガイドラインはありません。Because applications that use tracing vary widely, however, there are no general guidelines for strategic placement of tracing. トレースステートメントの配置の詳細については、「方法:トレースステートメントをアプリケーションコードに追加します。For more information on placing trace statements, see How to: Add Trace Statements to Application Code.

トレースの出力Output from Tracing

トレースの出力はリスナーと呼ばれるオブジェクトによって収集されます。Trace output is collected by objects called listeners. リスナーは、トレースの出力を受け取り、出力デバイス (通常は、ウィンドウ、ログ、またはテキスト ファイル) に書き込むためのオブジェクトです。A listener is an object that receives trace output and writes it to an output device (usually a window, log, or text file). トレース リスナーが作成されると、多くの場合、Trace.Listeners のコレクションに追加され、リスナーがすべてのトレース出力を受け取ることを許可します。When a trace listener is created, it is typically added to the Trace.Listeners collection, allowing the listener to receive all trace output.

トレース情報は、既定の Trace の出力対象、DefaultTraceListener に少なくとも常に書き込まれます。Tracing information is always written at least to the default Trace output target, the DefaultTraceListener. なんらかの理由 Listeners のコレクションに他のリスナーを追加せずに DefaultTraceListener を削除する場合、トレース メッセージは表示されません。If for some reason you have deleted the DefaultTraceListener without adding any other listeners to the Listeners collection, you will not receive any tracing messages. 詳細については、「トレース リスナー」を参照してください。For more information, see Trace Listeners.

トレース情報を書き込む TraceDebug の 6 種類のメンバーとメソッドを次の表に示します。The six Debug members and Trace methods that write tracing information are listed in the following table.

メソッドMethod 出力Output
AssertAssert 指定されたテキスト。何も指定されない場合は、呼び出し履歴。The specified text; or, if none is specified, the Call Stack. Assert ステートメントの引数として指定された条件が false の場合にだけ、出力が書き込まれます。The output is written only if the condition specified as an argument in the Assert statement is false.
失敗Fail 指定されたテキスト。何も指定されない場合は、呼び出し履歴。The specified text; or, if none is specified, the Call Stack.
WriteWrite 指定されたテキスト。The specified text.
WriteIfWriteIf 指定されたテキスト。WriteIf ステートメントの引数として指定された条件が満たされた場合にだけ出力されます。The specified text, if the condition specified as an argument in the WriteIf statement is satisfied.
WriteLineWriteLine 指定されたテキストおよびキャリッジ リターン。The specified text and a carriage return.
WriteLineIfWriteLineIf 指定されたテキストおよびキャリッジ リターン。WriteLineIf ステートメントの引数として指定された条件が満たされた場合にだけ出力されます。The specified text and a carriage return, if the condition specified as an argument in the WriteLineIf statement is satisfied.

Listeners のコレクションのすべてのリスナーは、上の表で説明したメッセージを受け取りますが、取られるアクションは、どのリスナーがメッセージを受け取るかによって異なる場合があります。All listeners in the Listeners collection receive the messages described in the above table, but the actions taken may vary depending on what kind of listener receives the message. たとえば、DefaultTraceListenerAssertFail に障害通知を受信し、TextWriterTraceListener は出力をストリームに単純に書き込むときにアサーションの追加ダイアログ ボックスが表示されます。For example, the DefaultTraceListener displays an assertion dialog box when it receives a Fail or failed Assert notification, but a TextWriterTraceListener simply writes the output to its stream.

独自のリスナーを実装することにより、結果をカスタマイズできます。You can produce custom results by implementing your own listener. たとえば、メッセージ ボックスにメッセージを表示するカスタム トレース リスナーや、データベースに接続してメッセージをテーブルに追加するトレース リスナーなどを実装できます。A custom trace listener might, for example, display the messages to a message box, or connect to a database to add messages to a table. すべてのカスタム リスナーは、前に示した 6 つのメソッドをサポートする必要があります。All custom listeners should support the six methods mentioned above. 開発者が定義するリスナーの作成については、「.NET Framework リファレンス」の「TraceListener」を参照してください。For more information on creating developer-defined listeners, see TraceListener in the .NET Framework reference.

Write メソッドおよび WriteLine メソッドでは、必ず指定されたテキストが書き込まれます。The Write and WriteLine methods always write the text that you specify. AssertWriteIf、および WriteLineIf は、指定されたテキストを書き込むかどうかを制御するブール型の引数を必要とします。式が true (WriteIf および WriteLineIf の場合)、または false (Assert の場合) の場合のみ、指定されたテキストを書き込みます。Assert, WriteIf, and WriteLineIf require a Boolean argument that controls whether or not they write the specified text; they write the specified text only if the expression is true (for WriteIf and WriteLineIf), or false (for Assert). Fail メソッドでは、常に指定されたテキストが書き込まれます。The Fail method always writes the specified text. 詳細については、「方法 :トレースステートメントをアプリケーションコードと .NET Framework 参照に追加します。For more information, see How to: Add Trace Statements to Application Code and the .NET Framework reference.

セキュリティに関する注意事項Security Concerns

ASP.NET アプリケーションを配置する前にトレースとデバッグを無効にしないと、アプリケーションに関する情報が公開され、悪意を持ったプログラムによって利用される可能性があります。If you do not disable tracing and debugging before deploying an ASP.NET application, your application may reveal information about itself that could be exploited by a malicious program. 詳細については、「方法 :トレースとデバッグコンパイルとビルド、および方法を使用して、条件付きでコンパイルします。トレーススイッチを作成、初期化、および構成します。For more information, see How to: Compile Conditionally with Trace and Debug, Compiling and Building, and How to: Create, Initialize and Configure Trace Switches. デバッグは、IIS (Internet Information Services) で設定することもできます。Debugging is also configurable through Internet Information Services (IIS).

関連項目See also