6

Xcode 4.x では、Run スキームを編集して「Guard Malloc を有効にする」ようにしました。追跡する必要があるわかりにくい malloc エラーがあるためです。この機能を使用するには、シミュレーターで実行する必要があることを認識しています。ただし、そうするとアプリがすぐにフリーズし、Xcode に次のようなスタック トレースが表示されます。

Xcode 4.x でのスタック トレース

私は解決策を見つけるためにグーグルで検索しましたが、これまでのところ喜びはありません. スキームで環境変数を設定する必要があることが他の場所で報告されました。

DYLD_INSERT_LIBRARIES  ->  /usr/lib/libgmalloc.dylib

ただし、これでは問題は解決しません。値として「lsystem」も試しましたが、それもうまくいきませんでした。

誰でもこの dylib の問題の解決策を提案できますか、または「Guard Malloc を有効にする」に代わる方法を推奨して、malloc されたヒープ領域を超えている場所を特定できますか?

アップデート

明確にするために、これは私が扱っているエラーのタイプです:

malloc: *** error for object 0x2b4b54: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

のシンボルブレークポイントを設定しようとしましたがmalloc_error_break、割り当てられた領域を超えた時点ではなく、メモリの問題で「ランダムに」ブレークします。

4

1 に答える 1

2

デバッグを支援するために、MallocStackLoggingを設定すると、アプリがクラッシュしたときに gdb コンソールに次のように入力できます。

(gdb) info malloc-history 0x543216

をクラッシュの原因となったオブジェクトのアドレスに置き換える0x543216と、より有用なスタック トレースが得られ、問題の原因となっているコード内の正確な行を特定するのに役立ちます。

詳細な手順については、この記事を参照してください。

于 2011-11-07T05:09:18.400 に答える