14

バックグラウンド

xcode4.1 / ios4 を xcode4.2 / 後、アプリの読み込み中、アプリが起動する前にクラッシュが発生ました。main()

ブレークポイントを設定しましたmain()が、到達しません。

main() ブレークポイント

  • 4.3の Xcode 4.1 でプロジェクトをコンパイルすると、Base SDKiOS 4.x および iOS 5 で正常に動作します。
  • Xcode 4.2Base SDKで 5.0 の同じプロジェクトをコンパイルすると、4.x では問題なく動作しますが、シミュレーターとデバイスの両方で iOS 5 でクラッシュします。

シミュレータクラッシュ

iOS 5 シミュレーター LLDB クラッシュ Xcode 4.2 出力

EXC_BAD_ACCESSでクラッシュする

スタック呼び出し

呼び出しのリスト、すべてのシステム呼び出し、main()まだ呼び出されていないものもありません。

私の最善の推測は、ライブラリのロードの問題ですが、それを追跡する方法を知っています!

解決の試み

  1. ゾンビをオンにしました
  2. すべてのロギングをオンにしました
  3. 異なるバージョンのシステム ライブラリを追加 (libz.1.2.5.dylib および libz.dylib)
  4. プロジェクトをクリーンアップしました
  5. シミュレーターからアプリを削除しました
  6. Derived Dataフォルダを削除する
4

12 に答える 12

10

展開のターゲットは何ですか?

私の展開ターゲットは iOS4.0 でした。iOS4.3に変えたら問題解決!(もちろん、iOS5 GM SDK に対してビルドします。) 私のアプリは iOS5 シミュレーターで実行されるようになりました。

このアイデアは、 ARCがiOS4.3以降でサポートされているという別のSOスレッドの回答から得ました。私の知る限り、私のアプリはARCを使用しておらず、依存ライブラリも使用していません。答えは、弱い参照のゼロ化についても述べていましたが、これはおそらく関連しているように見えました.libSystem.B.dylibへの弱い参照に関する特定のリンカディレクティブを削除することに多くの人が成功したためです。

多くの潜在的なユーザーを切り捨てているように感じるため、ベース展開ターゲットを 4.0 を超えて引き上げる必要があることは少し気になります。Apple は、誰もが常にデバイスをアップグレードすることを望んでいますが、多くの人はそうしません。しかたがない。

編集

このプロジェクトはもともと Xcode3 で行われたため、プロジェクト自体に不必要であり、この問題を引き起こしている奇抜な作業が含まれている可能性があります。でも、見つかったらヤバい!

編集2

まあ、まあ、まあ...さらに調べてみると... project.pbxprojファイルにlibSystem.B.dylibへの2つの誤った参照が見つかりました。これらはXcodeのビルド設定では表示されませんでしたが、手動で削除する必要がありました.テキストエディタ!

これを実行したら、ベース デプロイ バージョンを 4.0 にリセットし、iOS5 シミュレーター用にビルドしました。アプリは問題なく実行されました。

すばらしい。

教訓: プロジェクト ファイルにゴミが含まれる可能性を決して過小評価しないでください。

編集3

Xcode プロジェクト編集

Xcode プロジェクト パッケージ内のファイルでこれらの 3 行を削除しproject.pbxprojます (右クリックしてパッケージの内容を表示します)。

パッケージの内容を表示

于 2011-10-13T16:17:46.457 に答える
2

私はスキーム診断をいじっていましたが、誤って「ガードマロックを有効にする」をオンに設定したことで、まったく同じ動作が得られました。私は4.3をターゲットにしていて、5.0シミュレーターのARCで実行していました。XCodeからではなく、シミュレーターから起動すると、アプリは正常に実行されます。[製品]->[スキームの編集...]に移動し、左側の表で[実行]項目を選択してから、右側の[診断]タブを選択します。「GuardMallocを有効にする」のチェックを外します。

于 2011-11-29T20:23:23.570 に答える
2

リンカー フラグを確認します。使用している可能性のある一部のライブラリには、次のようなフラグが必要です。

-weak_library /usr/lib/libSystem.B.dylib

弱いリンクにより、iOS 4.x に対して 3.x デプロイメント ターゲットでビルドすることができました。なんらかの理由で、現在のシミュレーターでは完全に壊れています。

于 2011-10-10T20:24:24.180 に答える
1

プロジェクトが Carthage を使用し、ビルド フェーズが欠落main.mしているなどの理由で、リンクされたフレームワークがコピーされない場合、入力前にアプリがクラッシュする可能性があります。Run Script/usr/local/bin/carthage copy-frameworks

于 2016-11-13T22:23:04.587 に答える
1

私はまったく同じ診断を受けましたが、解決策はまったく異なりました。

ただし、プロジェクトで「弱い」関連の問題が見つからなかったため、ここの回答に記載されている解決策はうまくいきませんでした.pbxproj

しかし、問題の原因は+(void)initializeメイン スレッドから呼び出されたメソッドのデッドロックであることがわかりました。このメソッドでは、 を呼び出してdispatch_sync(dispatch_get_main_queue(), ^{[some block code]})いました。これを a dispatch_async(「a」に注意)に変更すると、問題が解決しました。

問題を発見したのは偶然でした。何も起こらなかったように見えましたが、Xcode の「スレッド」ナビゲーターは、アプリ自体はクラッシュしていないことを教えてくれました。そして、デバッガーで誤って「一時停止」をクリックしてしまいました。そして突然、デッドロックがあった場所で停止しました。いくつかの考えの後、これは論理的に明らかです。

于 2012-01-31T16:07:07.887 に答える
0

Xcode 4.2 には、私の使い方からいまだに荒い部分があります。完全な削除と再インストールにより、私が抱えていた問題が修正されました(「アタッチ」でスタックし、「公式」SOスレッドの解決策はどれも役に立ちませんでした)。ちょっと極端かもしれませんが。

ファイル ナビゲーターで最上位のプロジェクトを選択し、[ビルド フェーズ] タブに移動します。「Link Binary with Frameworks」セクションを展開してください。Apple が提供していないフレームワークはありますか? それらはオプションですか、それとも必須ですか? また、追加のフレームワークが必要なコードはありますか?

さらに支援するために、コール スタック ポップアップによって現在隠されているすべてのログ メッセージを投稿していただけますか?

于 2011-10-10T20:30:06.130 に答える
0

条件付きでリンカー フラグを iOS SDK に適用できますが、XCode 4 の iPhone シミュレーターには適用できません。

Other Linker Flags を選択し、Add Build Setting をクリックし、Add Conditional Setting を選択して、iOS SDK だけに -weak_library /usr/lib/libSystem.B.dylib を適用します。

これにより、シミュレーターのビルドは引き続き機能します。

于 2011-11-11T03:39:28.710 に答える
0

Guard の malloc も問題でした。おそらく、libxml2.2.7.3.dylib を使用しているためです。

この質問は同じクラッシュについて説明していますが、彼は幸運にもガードの malloc をオンにできたため、クラッシュの原因は明らかでした。Xcode を 4.2 にアップグレードした後、クラッシュしました。

Google対応できるように、スタック トレースを含めたいと思います。このページを見つけるのに苦労しました。

#0  0x00000000 in <????> ()
#1  0x99924ef3 in mig_get_reply_port ()
#2  0x9991e70c in mach_ports_lookup ()
#3  0x0141c124 in _xpc_domain_init_local ()
#4  0x01419eb1 in _libxpc_initializer ()
#5  0x8fe2a15b in __dyld__ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE ()
#6  0x8fe29cc0 in __dyld__ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE ()
#7  0x8fe27220 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#8  0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#9  0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#10 0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#11 0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#12 0x8fe281c0 in __dyld__ZN11ImageLoader15runInitializersERKNS_11LinkContextERNS_21InitializerTimingListE ()
#13 0x8fe1c626 in __dyld__ZN4dyld24initializeMainExecutableEv ()
#14 0x8fe20ef2 in __dyld__ZN4dyld5_mainEPK12macho_headermiPPKcS5_S5_ ()
#15 0x8fe1a2ef in __dyld__ZN13dyldbootstrap5startEPK12macho_headeriPPKclS2_ ()
#16 0x8fe1a063 in __dyld__dyld_start ()
于 2011-11-30T16:42:16.970 に答える
-1

main() が呼び出される前に同様のクラッシュ バグがあったことを覚えているようで、アプリ デリゲートで宣言された IBOutlets と nib で宣言された IBOutlets の不一致を追跡しました。コンセントを調べて、設定が間違っていないかどうかを確認します。

-mz

于 2011-10-10T09:12:15.023 に答える