2010-07-19 13 views
0

Je travaille sur une application iPhone, et j'ai quelques problèmes avec le compilateur. Voici la procédure:La compilation avec LLVM/Clang provoque un plantage, pas GCC 4.2

  1. Je compile avec Xcode 3.2.3, en ciblant iOS 4.0: mon appareil est un 2ème iPod touch exécutant iOS 4.0.
  2. Compilation avec GCC 4.2: fonctionne à la fois sur le simulateur et sur le périphérique
  3. Compilation avec le compilateur LLVM 1.5: fonctionne sur simulateur, mais pas sur le périphérique.
  4. Compilation avec LLVM GCC 4.2: même problème qu'avec le compilateur LLVM 1.5.

En cas d'échec, l'application ne finit même pas le chargement. Voici à quoi ressemble le journal:

run 
Running… 
[Switching to thread 11523] 
[Switching to thread 11523] 
sharedlibrary apply-load-rules all 
continue 
Program received signal: “EXC_BAD_ACCESS”. 
warning: check_safe_call: could not restore current frame 

warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 

Je n'ai aucune idée de ce qui se passe avec ça. Je veux vraiment mettre à jour mon code pour utiliser les dernières fonctionnalités annoncées à la WWDC (implicite @synthesize, la possibilité d'ajouter des variables d'instance dans les catégories, etc.), mais Clang est nécessaire pour cela.

+0

On dirait qu'il a été réduit davantage sur cette question - se demander si elles sont liées: http://stackoverflow.com/questions/5490432/building-with-llvm-and-any-optimization-causes-app-to -crash-on-startup – makdad

+0

Fascinant. Ce problème venait précisément de décider de commencer; il a disparu quand j'ai tout déménagé dans un nouveau projet. Je me demande, comme vous, si les deux sont liés. –

Répondre

3

On dirait que quelque chose a cuit dans la mémoire. Plus précisément, sur la pile.

Il existe des différences assez importantes, quoique entièrement subtiles, dans la génération de code entre LLVM et GCC. Gardez à l'esprit que LLVM-GCC est vraiment GCC-> LLVM; c'est-à-dire, l'analyseur GCC alimentant le moteur de génération de code LLVM. Par conséquent, je soupçonne que vous avez frappé un joli boîtier de bord. Soit un bug dans le codegen de LLVM, soit un bug dans votre programme qui se manifeste comme ce genre de crash. En ce qui me concerne, je peux imaginer qu'un échec de copie d'un bloc, puis de l'exécution d'un bloc sur un autre thread, pourrait se manifester comme un accident comme celui-ci.

Dans tous les cas, déposez un bug si vous le pouvez.

+0

Merci pour l'analyse. Le problème est qu'aucun de mes codes n'est en cours d'exécution, donc je ne pense pas que cela puisse poser problème. Il ne fait même pas à -applicationDidFinishLaunching :. Est-il possible que je viens de fermer mon installation devtools? –

+0

Pourrait être. Cela ressemble à un problème dyld/linker. Une ré-installation ne peut pas nuire. Très étrange. Encore; classer un bogue et fournir le binaire, si possible. – bbum