2012-03-06 12 views
44

Xcodeのこれらのオプションは何を説明できますか?Xcode - スクリーブル、ガードエッジ、ガードmalloc

  • ガードはガードmallocの

彼らは何をしているとどのような彼らは、どのように有益な彼らは、デバッグ/テスト用にすることができを有効にしますか?

  • をエッジ有効に落書き
  • を有効にしますか

    ありがとうございました。

  • 答えて

    42

    documentationより。

    • Enable Scribble。割り当てられたメモリに0xAAを割り当て、割り当てられていないメモリに0x55を割り当てます。
    • ガードエッジを有効にします。大きな割り当ての前後にガードページを追加する。
    • Guard Mallocを有効にします。 libgmallocを使用すると、バッファオーバーランや使用後フリーなどの一般的なメモリの問題を検出できます。

    フリーライズされていたメモリブロックにあったデータを上書きすることでフリーブロックした後、メモリブロックを使用していることは明らかです。
    Guard EdgeとGuard Mallocは、メモリーオーバーランと(ある程度は)読み取り/書き込み保護メモリブロックによるメモリオーバーランの発見に役立ち、メモリを誤って使用した場合にプログラムがクラッシュする可能性があります。

    +0

    時々私がクラッシュを持っているので、私はこれを聞いて私のアプリケーションはデバッグしようとしていますが、Xcode 4は "int retVal = UIApplicationMain(argc、argv、nil、@" AppDelegate "); "をエラーの原因として指摘しています。だから私はそれがエラーの正しい行を指すようにする方法を見つけることを試みていた。 – SpaceDog

    +0

    @DigitalRobotもし彼らが100% "保護"を与えていなくても、それがメモリエラーであれば、上のオプションのどれかが有効になっていれば、あなたのプログラムは実際のエラーの近くでクラッシュする可能性が高くなります。ありがとう。 –

    +0

    ありがとう。それが私が探していたものです! – SpaceDog

    3

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

    Jim Kubicek氏は、Debugging Smashed Memory in Obj-Cに「Xcodeでこれらを有効にするにはどうすればよいですか?」という素晴らしい例を示しています。質問:

    [Edit Scheme]ウィンドウを開き、[Diagnostics]タブに移動します。あなたは "Scribbleを有効にする"と "Malloc Stack"を有効にしたいと思うでしょう。 ...要するに、 "Enabled Scribble"は、アロケータに新たに割り当てられたメモリに0xAAを書き込ませ、割り当てられたメモリに0x55を書き込ませる。 "Malloc Stack"はメモリの割り当てと解放の履歴を記録します。あなたがここまで読んでいれば

    、おそらくAppleのテクニカルノートに興味があるでしょう: