2012-03-29 5 views
5

Xcodeデバッガを使用していない場合にのみ、アプリケーションがクラッシュしていました。デバッグできないので追跡が難しかったが、最終的にはそれを理解した。私が所有していないオブジェクトのリリースを呼び出すためでした。私はそれを修正する前に、私は上記の質問のいずれもが、何のクラッシュがdebugger.So経由で実行されていない時に、なぜ私の質問は、なぜある答えていないiOSがクラッシュするのは、XCode経由で実行していない場合だけです。コンセンサス?

iOS App Crashes when running by itself on device, does not crash when running through Xcode using debugger, or in simulator

iPhone crash only when device not connected to xcode, how to understand the crash log?

ここ(下記リンク)を2つの関連の質問を検索し、見つかりましたそれは起こる?私はデバッグ/リリースのクラッシュの理由を知っていますが、これは狂っています。それは10回以上起こったのですが、それはちょうどいいことですか?

+0

ゾンビを有効にしてプロファイリングを試しましたか? – CodaFi

+0

いいえ、私はゾンビオブジェクトにリリースメッセージを送信しているメソッドをdeallocに見て調べました。 – msk

答えて

2

あなたが説明するものは、あまりメモリに関連しない不明なバグではありません。このような時にdebug-mallocを使いたいかもしれません。それはすべてを見つけることは保証されていませんが。理由は(おそらく、ソースレベルのデバッガがある限り)、デバッグ可能なコードではメモリが少なくとも多少異なってレイアウトされており、デバッガではメモリがレイアウトされているからです。したがって、デバッガの下でエラーが発生すると、メモリの別の部分が(無害に)破損します。デバッガの下にないと、実際にコードが気になる場所が破損し、クラッシュします。

同じことが起こる可能性は逆ですが、デバッグ可能な状態でクラッシュした場合、デバッグ環境外に切り替える前に見つけられます。

0

[[NSBundle mainBundle] resourcePath]ディレクトリの外からSQLiteデータベースにアクセスすると、この問題が発生し、iCloudエラーが発生しました。

私はエラーを記録したコンソールを私のiPhoneにインストールするだけでエラーを発見しました。

http://itunes.apple.com/us/app/console/id317676250

私は正しいディレクトリからデータベースにアクセスすると、エラーが消え、アプリケーションが正常に起動し。

0

私はNSStringを作成し、そのオブジェクトから別のオブジェクトにUTF8Stringを送り、それをcharポインタに割り当てたときにこの症状が発生しました。 UTF8Stringメソッド(おそらくポインタ自体へのアクセスを与えるオブジェクト)が自動解放で動作することに気づいていないため、元のNSStringを保持するのを忘れてしまったプール。つまり、NSString自体を保持しても問題は解決しませんでした。

ゾンビが有効になっているので、デバッガの下にアタッチしたときにうまく動作するように見えたので、私が持っていたポインタはまだ有効でした。私はこれが働いた理由であるかどうかを見なければならない。もしそうなら、これはNSZombieを有効にした状態としない状態でテストする正当な理由です。

いずれにせよ、これはおそらく設計が貧弱で、一度見つけたばかりの初心者のメモリ管理ミスです。幸いなことに、オーガナイザウィンドウのコンソールは、どこから見始めるべきかのヒントを与えてくれました。そして、最終的に私のポインタの値が変わっていたところをデバッグしてくれました。これが道を見つけた人を助けてくれることを願っています。

0

私もこの問題を抱えていて、原因をすぐに見つけ出すことができました。うまくいけば、ここに投稿することで、誰か他の誰かを無駄にする時間を節約することができます。明確にするために、私のアプリはXcodeから直接起動されても問題なく実行されますが、iPad上で手動で起動するとすぐにクラッシュします。

このアプリはObj-Cで書かれていますが、Swiftで書かれたサードパーティのコードに依存しています。 Swiftコードは、埋め込みフレームワークとしてアプリケーションに組み込まれています。ビルドオプションの下でアプリのビルド設定で「埋め込みコンテンツにスウィフトコードが含まれています」を「はい」に設定しなければならなかったため、問題は解決しました。

関連する問題