Visual Studio でマルチスレッド アプリケーションをデバッグする

スレッドは、オペレーティング システムでプロセッサ時間を許可する命令のシーケンスです。 オペレーティング システムで実行されているプロセスは、いずれも 1 つ以上のスレッドで構成されます。 複数のスレッドで構成されるプロセスをマルチスレッド プロセスといいます。

複数のプロセッサ、マルチコア プロセッサ、またはハイパースレッディング プロセッサを搭載したコンピューターでは、複数の同時スレッドを実行できます。 多くのスレッドを使用する並列処理では、プログラムのパフォーマンスを大幅に向上させることができますが、多くのスレッドを追跡するため、デバッグが困難になる場合もあります。

マルチスレッドでは、新しい種類の潜在的なバグが発生する可能性があります。 たとえば、複数のスレッドが同じリソースにアクセスすることが必要になる場合がありますが、リソースに安全にアクセスできるのは一度に 1 つのスレッドだけです。 常に 1 つのスレッドだけがリソースにアクセスできるようにするには、何らかの形式の相互排他が必要になります。 相互排他が正しく実装されていないと、"デッドロック" 状態が発生し、すべてのスレッドが実行不能になる可能性があります。 多くの場合、デッドロックはデバッグするのが困難な問題です。

マルチスレッド アプリをデバッグするためのツール

Visual Studio には、マルチスレッド アプリのデバッグに使用できるさまざまなツールが用意されています。

Visual Studio には、強力なブレークポイントとトレースポイントも用意されており、マルチスレッド アプリケーションのデバッグに役立ちます。 個々のスレッドにブレークポイントを配置するには、ブレークポイントの条件とフィルターを使用します。 トレースポイントを使用すると、中断なしにプログラムの実行をトレースして、デッドロックなどの問題を調べることができます。 詳細については、「ブレークポイント アクションとトレースポイント」を参照してください。

ユーザー インターフェイスを含むマルチスレッド アプリケーションは、特にデバッグが困難になることがあります。 アプリケーションを別のコンピューターで実行して、リモート デバッグを使用することを検討してください。 詳細については、「リモート デバッグ」を参照してください。

マルチスレッド アプリのデバッグに関する記事