web-dev-qa-db-ja.com

Xcode-落書き、ガードエッジ、ガードmalloc

誰かがXcodeのこれらのオプションが何をするのか説明できますか?

  • 落書きを有効にする
  • ガードエッジを有効にする
  • Guard Mallocを有効にする

それらは何であり、何をしているのか、そしてそれらはデバッグ/テストにどの程度役立つでしょうか?

ありがとう。

55
SpaceDog

ドキュメント から。

  • フリーハンドを有効にします。割り当てられたメモリを0xAAで埋め、割り当て解除されたメモリを0x55で埋めます。
  • ガードエッジを有効にします。大きな割り当ての前後にガードページを追加します。
  • Guard Mallocを有効にします。 libgmallocを使用して、バッファオーバーランや解放後使用などの一般的なメモリの問題をキャッチします。

Scribbleは、解放時にメモリブロックにあったデータを上書きすることで、解放後にメモリブロックを使用していることを明らかにします。
Guard EdgesとGuard Mallocは、メモリオーバーランを検出し、メモリブロックを読み書き保護して(ある程度)解放後使用して、メモリを誤用した場合にプログラムをより明確にクラッシュさせるのに役立ちます。

47

上記の「ドキュメント」リンクは一般にXcodeへのリンクですが、より具体的には RN-MallocOptions がこれらの(およびその他の)オプションを詳細にカバーしています。

Jim Kubicekが Obj-Cで破壊されたメモリをデバッグする で素晴らしい例を示し、重要な「Xcodeでこれらを有効にするにはどうすればよいですか?」質問:

[スキームの編集]ウィンドウを開き、[診断]タブに移動します。 「落書きを有効にする」と「Mallocスタック」をオンにする必要があります。 ...要するに、「Enabled Scribble」により、アロケータは新しく割り当てられたメモリに0xAAを書き込み、割り当て解除されたメモリに0x55を書き込みます。 「Malloc Stack」は、メモリの割り当てと解放の履歴を記録します。

ここまで読んだことがあれば、おそらくAppleのテクニカルノートに興味があるでしょう。

5
Nuthatch