iPhone OSのメモリの問題 - デバッグする方法?
-
18-09-2019 - |
質問
私はメモリに関連し、私が思うに、である私のiPhoneアプリにはかなり奇妙な問題を抱えている壊れるます:
1つの時点で、私は私が-[sortArrayUsingFunction]
で行う配列を、ソートする必要があります。
void *test = malloc(2 * sizeof( int ))
への呼び出しをメソッド呼び出しの前にNSLog()
ようなもので、いくつかのメモリを割り当てるか、持っているいずれかの場合を除き、の結果が正しくありません。
つまり:私は少しソート関数を呼び出す前に使用されたメモリを増やした場合のソートにのみ機能します。私はいくつかの点で、メモリが破損しているため、これがあると思います。
どのようにこのような何かをデバッグするのですか?
解決
これが鳴ります。エラーのこの種のデバッグに役立つ多くのは、Mac noreferrer"> Appleの偉大のテクニカルノート、特に基盤の一部ます。
あなたのケースのために私は、自動解放プールを無効にします(環境変数のNSEnableAutoreleasePool=NO
を設定)、またはあなたがリリースされたオブジェクトにメッセージを送信する場所を見つけるためにゾンビの機能(NSZombieEnabled=YES
)を使用すると思います。
他のヒント
Valgrindの下シミュレータでプログラムを実行してみます:
とシミュレータの下でそれを使用する方法:
http://landonf.bikemonkey.org/code/iphone/iPhone_Simulator_Valgrind .20081224.htmlする
あなたはそれがインストールされる場所に応じてコードの例ではvalgrindのパスを変更する必要があります。
このようなものは、デバッグに挑戦することができます。しかし、私は知らない、そこ範囲外の検出など他のプラットフォーム上でのアクセスとのためのいくつかのツールがあるので、私はiPhoneのために何があるだろうと推測ます。
おそらく、あなたは、配列の2つのコピーを保存し、差異のためにそれらを比較する必要があります。違いをプリントアウト。アレイの1つに導入された「ジャンク」の性質は、それがどこから来たのかについてのヒントを与えるかもしれない。
(それを読むために他の誰かを取得し、いっそのことか)また、ちょうどこのポイントの前に実行されるコードを通過し、それを再読み込み。あなたはバグを見つけるかもしれません。