Malloc detect
Malloc Detect は、エラーを検出して報告するオプションの拡張機能を malloc サブシステムに提供します。 malloc 環境で発生したエラーに関する情報が報告され、指定されている場合はアクションを実行できます。
Malloc Detect は、明確に識別できる次の 3 つの機能に分類することができます。
- エラーの検出
- stderr を使用するエラー報告
- アプリケーションで定義された関数を使用するエラー報告
エラーの検出
malloc サブシステム内のいくつかのエラーは容易に検出できます。
有効なヒープ・アドレスを指していないポインターを解放するといったエラーは、コード・パスの解放と同期して検出されます。 しかし、非同期的なイベントによって起こるエラー (例えば、ヒープ破壊など) は、位置を正確に示すのははるかに困難です。 Malloc Detect の
check_arena
オプションは、このタイプの破壊を同期ベースで検査するように設計されています。 malloc サブシステム API の呼び出しのたびに、内部データ構造の検査が実行されます。 破壊が見付かった場合は、それがアプリケーションに報告されます。 これは、
これらの難しい問題をデバッグするための他のポイントをタイミングよく提供します。 check_arena
オプションは、MALLOCDEBUG 環境変数を次のように設定することによって使用可能にできます。 MALLOCDEBUG=checkarena
stderr を使用するエラー報告
malloc サブシステムでエラーを報告する通常の方法は、戻り値および errno 環境変数を使用する方法です。 Malloc Detect の
verbose
オプションを使用すると、これらのエラーをアプリケーション・プログラムの標準エラー・ストリームに印刷することができます。 これにより、malloc でのエラーの報告をより見やすく、より詳細にすることができます。 verbose オプションは、MALLOCDEBUG 環境変数を次のように設定することによって使用可能にできます。 MALLOCDEBUG=verbose
|アプリケーションで定義された関数を使用するエラー報告
Malloc Detect を使用すると、ユーザーは、malloc サブシステムがエラーに遭遇した場合に呼び出す関数を提供することもできます。 Malloc Report は、アプリケーション提供の関数を呼び出して、戻りを待って、それから通常のようにリターンします。 この機能を使用すると、アプリケーションは、プログラムを継続させる前に、必要なデバッグ・タスクで要求されるものは何でも実行することができます。 この機能を使用可能にするには、アプリケーションは、グローバル関数ポインター malloc_err_function の値をアプリケーションのエラー・ルーチンの値と同じ値に設定する必要があります。 例:
extern void (*malloc_err_function)(int, ...)
malloc_err_function = &application_malloc_err_hdl
制限
Malloc Detect のデバッグ機能は、以下の malloc ポリシーおよびオプションと互換性があります。