私はC++とMFCで書かれたアプリケーションをWindows上でマルチスレッド化しています。場合によっては、デッドロックやこれらのスレッドのために発生する処理されない例外などの苦情を受け取ることがあります。通常はVisual Studio(問題が再現可能な場合)を使用します。そうでない場合はWinDbgを使用して生成されたダンプファイルを分析します。これを行うためのより良い方法はありますか?これを行うために他のツールを使用することはできますか?マルチスレッドアプリケーションのデバッグ
4
A
答えて
1
マルチスレッドシステムは複雑で、ブロックされた場所は適切なツールでは作成されません。デッドロックの原因を調べるには、ロック/ロック解除のレコードをテーブルマップに配置します。 "action lock"を開始すると、テーブルに保存されます。unlock ocoursはテーブルからレコードを削除します。サイクルの終わりに、テーブルの状態を記録したり、特定のイベントでこれを行うことができます。
この実装をdllでビルドして、他のプロジェクトでも使用できます。
3
十分な予算があればIntel Thread Checkerをお勧めします。実行中のプログラムを分析し、可能な競合状態を警告するのは素晴らしい仕事です。
詳細については、demonstration videoをご覧ください。
2
私はまだそれを使用していませんが、Relacy Race Detectorはスレッドの問題のいくつかのクラスを追跡するのに非常に便利です。
2
CRITICAL_SECTIONsでデッドロックしている場合は、WinDbgで!locks debugger extensionを使用して、保持されているロックを所有しているスレッドを確認し、kbコマンドを使用してそのスレッドの呼び出しスタックを調べることができます。
関連する問題
- 1. マルチコアプロセッサでのマルチスレッドアプリケーション
- 2. マルチスレッドアプリケーションのWCFプロキシシングルトン
- 3. マルチスレッドアプリケーションのHTTPクライアント
- 4. マルチスレッドアプリケーションのGCOV
- 5. マルチスレッドアプリケーションのSetCurrentDirectory
- 6. マルチスレッドアプリケーションでのBerkeley DB
- 7. QSqlモジュールとマルチスレッドアプリケーション
- 8. マルチスレッドアプリケーションのシングルトンクラス、ロックの提案
- 9. マルチスレッドアプリケーションでのベクトルの使用
- 10. マルチスレッドアプリケーションの静的クラス/メソッド
- 11. .netマルチスレッドアプリケーションのプロファイリング(Visual Studio 2008)
- 12. マルチスレッドアプリケーションでのアクセス違反、C++
- 13. gtkDを使用したマルチスレッドアプリケーション
- 14. マルチスレッドアプリケーションとは何ですか?
- 15. マルチスレッドアプリケーションのメモリ不足の防止
- 16. マルチスレッドアプリケーションのイベントハンドラの追加と削除
- 17. マルチスレッドアプリケーションからのptraceの使用
- 18. 多量のマルチスレッドアプリケーションのプロファイリング/最適化
- 19. MultiCoreマルチスレッドアプリケーションの作成方法は?
- 20. SQLAlchemyマルチスレッドアプリケーションでの適切なセッション処理
- 21. Windows CEの単純なマルチスレッドアプリケーション - スレッドスケジューリング
- 22. マルチスレッドアプリケーションでのjava.util.loggingによるログ
- 23. マルチスレッドアプリケーションからの効率的な終了
- 24. Delphiマルチスレッドアプリケーションをデバッグする - 100%CPUを消費する方法を教えてください
- 25. マルチスレッドアプリケーションでHibernateを使用するには?
- 26. Javaでマルチスレッドアプリケーションを開発する
- 27. マルチスレッドアプリケーションでファイルにログを書き込む
- 28. マルチスレッドアプリケーションでファイルロギングを実行する方法
- 29. UDP + javaを使用したマルチスレッドアプリケーション
- 30. マルチスレッドアプリケーションでMPIを使用する
http://stackoverflow.com/questions/9926/analyzing-multithreaded-programsを参照してください。 –