私はC++プロジェクトで作業しています。私はRC Purifyからのメモリリークを見つけようとしていますが、満足のいく出力は得られません。私はmem-leakを検証するためにすべてのコンストラクタとデストラクタにログを書き込むか、そうするプラグインを見つけようとしています。C++プロジェクトのコンストラクタとデストラクタコールをトレース/ログするための標準ビジュアルスタジオ2008プラグインはありますか?
本当に答えて
ないプラグインがありますが、ベースオブジェクトのカウンタ追加することにより、楽器、あなたのクラスをすることができます。各インストルメントクラスの
template <typename T>
struct Counter {
static atomic_int alive;
Counter() {
++alive;
}
~Counter() {
--alive;
}
};
template <typename T>
atomic_int Counter::alive = 0;
そして:あなたが使用できるコードで
class Instrumented : Counter<Instrumented> // CRTP
{ ... };
を:
std::cout << Counter<Instrumented>::alive << std::endl;
タイプInstrumented
のオブジェクトを作成していないされているどのように多く表示するには 破壊されました。
Purifyやvalgrindなどのツールより悪い結果になることがあることに注意してください(つまり、インストゥルメントされているオブジェクトだけを追跡し、デストラクタがひどく書き込まれたためにメモリが失われたり、ポインタを使用している場合、それは侵入的で、結果を得るためにコードを明示的に追加する必要があります - あるいは、デバッガを使用してください...)しかし、これは過去にいくつかの問題を理解するのに役立ちました。
あなたはメモリリークはこちらからダウンロード見つけようとするのWinDbgを使用することができます。http://msdn.microsoft.com/en-us/windows/hardware/gg463009、コマンドプロンプトやデバッグツールであなたの漏れアプリのGFLAGSユーザースタックトレースをオンにするコマンドプロンプト:
gflags /i MyApp.exe +ust
ますその後、いずれかのWinDbgのコマンドプロンプトで、接続またはWinDbgのからアプリケーションを起動することができます入力してください:アプリの時間続い
.symfix;.reload;g
リークが発生するのに十分なだけ実行してWinDbgに戻るctrl+break
を入力して!heap -l
と入力すると、リークが検出されます。ここにはウォークスルーがあります:http://www.codeproject.com/Articles/31382/Memory-Leak-Detection-Using-Windbgとhttp://cprogrammers.blogspot.co.uk/2006/09/windows-memory-leak-analysis-using.htmlです。
また、WinDbgのが入るアタッチ、その場合には、ハンドルリーク、次のようになります。
!htrace -enable
これはトレースを処理可能にし、スナップショットを作成し、その後、あなたのアプリケーションにいくつかのものを行うのWinDbg ctrl+Break
で破り、!htrace -snapshot
を入力し、 !htrace -diff
と表示され、最後のスナップショット以降にリリースされていないすべてのハンドルが表示されます。がんばろう。
- 1. C++標準コンストラクタを生成
- 2. C#サービス:エラー開始サービス:標準コンストラクタがありません
- 3. Gnu-Linux/Unix-terminalの標準または標準幅はありますか?
- 4. C++をコーディング標準に準拠させるためのリファクタリング用のツールはありますか?
- 5. 標準のボタンサイズはありますか?
- 6. C++ 11のマップ標準のat()constアクセサはありますか?
- 7. C用の標準のmysql接続プールライブラリはありますか?
- 8. 次のC標準のアイデアはどこにありますか?
- 9. ISOのC標準ライブラリの関数strcmpiはありますか?
- 10. iOS xCodeプロジェクト内でファイルを整理するための標準的なプラクティスはありますか?
- 11. C++に標準の日付/時刻クラスはありますか?
- 12. ビットストリーム用の標準C関数はありますか?
- 13. C++標準ライブラリのヘッダはどこにありますか
- 14. NAntのための基本的な標準の.buildファイルはありますか?
- 15. C++標準でフレーズ "コンストラクタに名前がありません"の意味
- 16. ビジュアルスタジオ2005/2008用のミニザーアドインはありますか?
- 17. Linuxのコマンドラインスイッチと引数の標準はありますか?
- 18. C++に標準のgetch()がありますか?
- 19. タイムアウトのあるブロックを実行するための標準のScala関数はありますか?
- 20. には、double変数のabsを取得するための標準C関数があります
- 21. IcalendarイベントRSVPの標準と実装はありますか
- 22. STLがC++用であるため、C(C99など)のための標準化された一般的なライブラリはありますか?
- 23. 異なるC++標準とリンクするC++標準ライブラリ
- 24. 同じファイルと標準出力に直接標準エラーがありますか?
- 25. C++コールスタックは標準ではありませんか?
- 26. リリースのためにビジュアルスタジオのC++プロジェクトをどのようにパックしますか?
- 27. ビジュアルスタジオ2008のためにWindows phone 7エミュレータを手に入れる方法はありますか?
- 28. C++ 11標準ライブラリを検出するプリプロセッサディレクティブはありますか?
- 29. C++に標準キューがありますか?
- 30. コンテンツを簡単に表示したり隠すための標準はありますか?
これはctorsとdtorsの実行中にも発生しますが、実際にはスレッドセーフではありません。 – MSalters
私はスレッドの安全性を修正しましたが、これまでの状況ではスレッドの問題はありませんでした。 * one off *エラーの時点では、オブジェクトが漏洩したときを検出するためのツールとしてのみ使用されます。正確であることを意味するものではありません。一回限り(またはタイプのオブジェクトを作成/破棄する複数のスレッドが発生した場合は複数回も)、競合状態として理解する必要があります。 –