マルチスレッド アプリケーションのデバッグ
スレッドは、オペレーティング システムでプロセッサ時間を割り当てる命令のシーケンスです。 オペレーティング システムで実行されているプロセスは、いずれも 1 つ以上のスレッドで構成されます。 複数のスレッドで構成されるプロセスをマルチスレッド プロセスといいます。
複数のプロセッサ、マルチコア プロセッサ、またはハイパースレッディング プロセッサを搭載したコンピューターでは、同時に複数のスレッドを実行できます。 複数のスレッドを同時に実行すると、プログラムのパフォーマンスは大幅に向上しますが、複数のスレッドを追跡する必要があるため、デバッグは難しくなります。
また、マルチスレッドには新しい種類の潜在的な問題が伴います。 たとえば、複数のスレッドが同じリソースにアクセスする必要があり、一度に 1 つのスレッドだけがそのリソースに安全にアクセスできるということがよくあります。 一度に 1 つのスレッドだけがリソースにアクセスできるようにするには、相互排他を適用する必要があります。 相互排他が正しく適用されなければ、デッドロック状態が発生し、すべてのスレッドが実行不能になる可能性があります。 デッドロックは、デバッグが特に困難な問題の 1 つです。
Visual Studio 2010 では、[スレッド] ウィンドウなどのユーザー インターフェイスが強化されており、マルチスレッド デバッグが容易になっています。スレッド インターフェイスの新機能について理解を深めるには、チュートリアルを実行するのが最善の方法です。 「チュートリアル : マルチスレッド アプリケーションのデバッグ」を参照してください。
Visual Studio には、強力なブレークポイントとトレースポイントも用意されており、マルチスレッド アプリケーションをデバッグする際にきく役立ちます。 ブレークポイント フィルターを使用すると、個々のスレッドにブレークポイントを配置できます。 「方法 : ブレークポイント フィルターを指定する」を参照してください。
ユーザー インターフェイスを含むマルチスレッド アプリケーションは、特にデバッグが困難になることがあります。 その場合には、アプリケーションを別のコンピューターで実行し、リモート デバッグを使用することを検討してください。 詳細については、「リモート デバッグのセットアップ」を参照してください。
このセクションの内容
方法 : [スレッド] ウィンドウを使用する
[スレッド] ウィンドウを使用してスレッドをデバッグする際に役立つ手順について説明します。方法 : デバッグ中に別のスレッドに切り替える
デバッグ コンテキストを別のスレッドに切り替える 3 つの方法について説明します。方法 : スレッドに対するフラグの設定と設定解除を行う
デバッグ中に特に注意する必要のあるスレッドにマークまたはフラグを設定する方法について説明します。方法 : ネイティブ コードのスレッド名を設定する
[スレッド] ウィンドウに表示するスレッド名の設定方法について説明します。方法 : マネージ コードのスレッド名を設定する
[スレッド] ウィンドウに表示するスレッド名の設定方法について説明します。チュートリアル : マルチスレッド アプリケーションのデバッグ.
Visual Studio 2008 の方法に重点を置いてスレッドのデバッグ機能を紹介するガイド ツアーです。方法 : 高パフォーマンス クラスター上でデバッグする
パフォーマンスの高いクラスター上で実行されるアプリケーションをデバッグする方法について説明します。ネイティブ コード内のスレッドのデバッグのヒント
ネイティブ スレッドのデバッグに役立つ簡単な手法について説明します。[並列タスク] ウィンドウの使用
マネージまたはネイティブのすべてのタスク オブジェクトの一覧を、それらのステータス、およびその他の有益な情報を含めて表示します。[並列スタック] ウィンドウの使用
複数のスレッド (またはタスク) の呼び出し履歴を単一のビューに表示します。また、スレッド (またはタスク) で共通のスタック セグメントを結合します。チュートリアル: 並行アプリケーションのデバッグ
[並列タスク] ウィンドウと [並列スタック] ウィンドウの使用方法を示すチュートリアルです。
関連項目
方法 : ブレークポイント フィルターを指定する
個々のスレッドにブレークポイントを配置する場合にブレークポイント フィルターを使用する方法について説明します。方法 : トレースポイントとブレークポイントのアクションを指定する
トレースポイントを使用すると、プログラムの実行を中断なしでトレースできます。 この方法はデッドロックなどの問題を調べる場合に役立ちます。マネージ スレッド処理
.NET Framework プログラミングでのスレッドの概念についてコード例を示しながら説明します。コンポーネントのマルチスレッド
.NET Framework コンポーネントでのマルチスレッドの使用方法について説明します。マルチスレッド
MFC を使用する C# プログラマを対象とし、スレッドの概念についてコード例を示しながら説明します。方法 : リモート クラスター アプリケーションをデバッグする
パフォーマンスの高いクラスター上で実行されるアプリケーションのリモート デバッグをセットアップする方法について説明します。