メモリ関連の問題を追跡する際に使用する戦略は何ですか?メモリリーク、メモリ破損などを特定するために、どのツールを使用していますか(オープンソースおよびプロプライエタリ)?システムでgdb/dbxのみが使用可能な場合、メモリリークをどのように追跡しますか?
私にとって、デバッガーだけでメモリリークを修正するのは非常に困難です。
valgrindは驚くほど役に立ちます。
Massif (valgrindから)は、メモリリークを見つけるための最良の方法の1つです。疑わしいコードを繰り返し(またはプログラムを十分に長く実行して)、ms_printを使用して結果をダンプします。通常、コールスタックはそれを修正するのに十分な情報を提供します。
GDBを使用すると、実行中のプログラムに接続して、malloc_stats()
などの関数を呼び出すことができます。
プログラムが別の言語で書かれている場合は、もっと注意が必要かもしれません。最近、一部のGDBでスクリプトが可能になり、コアダンプからPythonメモリを分析できる gdb-heap などの興味深いプロジェクトが開始されました。同様のメモリ分析スクリプトがC++オブジェクトで可能です。
また読む https://stackoverflow.com/questions/2564752/examining-c-c-heap-memory-statistics-in-gdb
Solarisの場合、 このStackOverflowの質問 (他の形式の不正なメモリアクセスによるリークチェックが含まれます)の回答にリストされているツールがいくつかあります。
私はしばらくの間Objective-Cをやっていて、Cレベルのメモリ管理などを扱うアナライザーがあります。 Clang Static Analyzer は非常に優れているため、AppleはxCodeIDEにバンドルすることにしました。これがあなたの質問に適しているかどうかはわかりませんが、 Cを実行すると、試してみる価値があります。