私は多くのベテランIOSの開発者は、おそらく一点で見られるか、彼らのキャリアの中で他のしていることを示すエラーを追跡しようとして数日を過ごしています解放されたオブジェクトのチェックサムが正しくない - デバイスのトラブルシューティングを行うにはどうすればよいですか?
MyApp-IPad(1403,0x5ab3000) malloc: *** error for object 0x2b3aa04: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
私はネット上で周りに検索し、その多くの人を発見しましたNSZombieEnabled
またはMallocStackLogging
を使用することをお勧めしますが、シミュレータを使用していない限り、これらは機能しないようです。残念ながら、実際のデバイスを使用しない限り、私はクラッシュを起こすことはありません。その場合、数分おきに発生します。
MallocStackLoggingを使用すると、自分のローカルIPad(/ private/var/mobile/Applications/....)にファイルが書き込まれますが、その.linkファイルをmyに転送する方法はないようですローカルマシン(デバイスがjailbrokenされていないため)、malloc_historyを使用してローカルマシン上で使用する方法がないように思えます。
Instruments-> Allocationsを実行するとクラッシュする可能性がありましたが、リージョンを調べると50以上の割り当て(多くの異なる機能から)を指していましたが、すべて割り当てが解除され、 。そして、それらはすべてImageIO(start_pass_huff_decoderなど)の内部配分でした
私は非常に複雑で大きなコードベースを使用しているため、プロジェクト全体のコード検査は実行できません。
チェックサムに違反するとすぐにデバッガを破損させる方法が必要です。これは、無関係なmallocを実行しているときに起こることではなく、有用な情報を提供しません。 malloc_error_break
にブレークポイントを設定することは効果がないようです。
私は無効なポインタをどこかでメモリに書き込んではいけないことは明らかですが、コードのどの部分がそれを引き起こしているのかを絞り込む方法については固まっています。
ご意見やご提案は非常に役に立ちます。
ありがとうございます。
私はデバイスでデバッグしようとしましたが、悪いメモリ書き込みを行っているコードを特定する方法がわかりません。私はスタティック・アナライザーを試してみましたが、関係するものは何もなかったのです。むしろ私のコードを共有したいのですが、このタイプの問題をトラブルシューティングするための他の一般的な提案はできますか? – Locksleyu
あなたはnikita zhukのclangスタティックアナライザを試しましたか? NSZombieには何が表示されますか?デバイスでアプリをデバッグし、クラッシュを再現してみてください。また、可能な限りリークを除去してください。 –