* nixシステムの大規模C / C ++コードでメモリ関連の問題を追跡/修正する方法

* nixシステムの大規模C / C ++コードでメモリ関連の問題を追跡/修正する方法

メモリ関連の問題を追跡するためにどのような戦略を使用しますか?メモリリーク、メモリ破損などを識別するためにどのツール(オープンソースと排他的)を使用しますか?システムでgdb / dbxのみが利用可能な場合は、メモリリークをどのように追跡しますか?

デバッガだけを使用してメモリリークを修正することは非常に困難です。

答え1

ソースコードの変更が可能な場合動的割り当て素晴らしいです。解放されていないポインタとそのポインタが割り当てられている行(デバッグシンボルで構築されたコードの場合)を一覧表示します。

できないなら、ウォールグリーンほぼこの種の標準です。通常、Valgrindは使用するのが少し難しいと思いますが、より多くの機能を備えており、コードにdmalloc呼び出しを追加しません。

答え2

valgrindは非常に役立ちます。

答え3

構成(valgrindから)は、メモリリークを見つけるための最良の方法の1つです。疑わしいコードを繰り返し(または十分に長い間プログラムを実行して)、ms_printを使用して結果をダンプします。通常、コールスタックは問題を解決するのに十分な情報を提供します。

GDBを使用すると、実行中のプログラムに接続し、次のようなものを呼び出すことができます。malloc_stats()

プログラムが別の言語で書かれている場合は、より難しいかもしれません。最近、いくつかのGDBはスクリプト機能を獲得し、人々は次のような興味深いプロジェクトを始めました。GDBヒープ、コアダンプからPythonメモリを分析します。 C ++オブジェクトにも同様のメモリ分析スクリプトを使用できます。

また読んでくださいhttps://stackoverflow.com/questions/2564752/examining-cc-heap-memory-statistics-in-gdb

答え4

私はしばらくObjective-Cを使用してきましたが、Cレベルのメモリ管理などのタスクを処理するプロファイラがあります。Clang Static Analyzerとても良かったので、AppleはこれをxCode IDEと共にバンドルすることにしました。これがあなたの問題に適しているかどうかはわかりませんが、Cを使用している場合は試してみる価値があります。

関連情報