web-dev-qa-db-fra.com

Tous les points d'arrêt exceptionnels s'arrêtent sans raison sur le simulateur

C'est très pénible, chaque fois que j'essaie de déboguer sur le simulateur avec "tout le point d'arrêt d'exception", l'application s'arrête sans raison sur cette ligne:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([STAppDelegate class]));

Quelqu'un d'autre l'a-t-il trouvé autonome en train de se débattre avec ce problème? 

Merci!

MODIFIER

Trace arrière au premier lancer:

 thread #1: tid = 0x1d96b, 0x36fbf540 libc++abi.dylib`__cxa_throw, queue = 'com.Apple.main-thread', stop reason = breakpoint 3.2
    frame #0: 0x36fbf540 libc++abi.dylib`__cxa_throw
    frame #1: 0x306975cc libFontParser.dylib`TFileDescriptorContext::TFileDescriptorContext(char const*) + 112
    frame #2: 0x306973d8 libFontParser.dylib`TFileDataReference::TFileDataReference(char const*) + 164
    frame #3: 0x306971fc libFontParser.dylib`TFileDataSurrogate::TFileDataSurrogate(char const*, bool) + 188
    frame #4: 0x3069555a libFontParser.dylib`TFont::CreateFontEntitiesForFile(char const*, bool, TSimpleArray<TFont*>&, bool, short, char const*) + 1402
    frame #5: 0x30694a80 libFontParser.dylib`FPFontCreateFontsWithPath + 224
    frame #6: 0x2a5032bc libCGXType.A.dylib`create_private_data_with_path + 12
    frame #7: 0x2a3ca3c4 CoreGraphics`CGFontCreateFontsWithPath + 24
    frame #8: 0x2a4855d6 CoreGraphics`CGFontCreateFontsWithURL + 310
    frame #9: 0x313dfee4 GraphicsServices`AddFontsFromURLOrPath + 68
    frame #10: 0x313e39de GraphicsServices`__Initialize_block_invoke + 934
    frame #11: 0x0121fabe libdispatch.dylib`_dispatch_client_callout + 22
    frame #12: 0x01220750 libdispatch.dylib`dispatch_once_f + 100
    frame #13: 0x313df72c GraphicsServices`Initialize + 196
    frame #14: 0x377944c4 libobjc.A.dylib`_class_initialize + 536
    frame #15: 0x3779a046 libobjc.A.dylib`lookUpImpOrForward + 254
    frame #16: 0x37799f3e libobjc.A.dylib`_class_lookupMethodAndLoadCache3 + 34
    frame #17: 0x377a01f8 libobjc.A.dylib`_objc_msgSend_uncached + 24
    frame #18: 0x2d673b6e UIKit`-[UIStatusBarNewUIForegroundStyleAttributes makeTextFontForStyle:] + 78
    frame #19: 0x2d634d94 UIKit`-[UIStatusBarForegroundStyleAttributes textFontForStyle:] + 104
    frame #20: 0x2d5e767e UIKit`-[UIStatusBarServiceItemView updateForContentType:serviceString:serviceCrossfadeString:maxWidth:actions:] + 390
    frame #21: 0x2d5e74ee UIKit`-[UIStatusBarServiceItemView updateForNewData:actions:] + 186
    frame #22: 0x2d6428d0 UIKit`-[UIStatusBarItemView initWithItem:data:actions:style:] + 324
    frame #23: 0x2d642568 UIKit`-[UIStatusBarLayoutManager _createViewForItem:withData:actions:] + 108
    frame #24: 0x2d5e6f74 UIKit`-[UIStatusBarLayoutManager _prepareEnabledItemType:withEnabledItems:withData:actions:itemAppearing:itemDisappearing:] + 264
    frame #25: 0x2d5e6e22 UIKit`-[UIStatusBarLayoutManager prepareEnabledItems:withData:actions:] + 74
    frame #26: 0x2d5e6c72 UIKit`-[UIStatusBarForegroundView _setStatusBarData:actions:animated:] + 162
    frame #27: 0x2d5e6b96 UIKit`-[UIStatusBarForegroundView setStatusBarData:actions:animated:] + 710
    frame #28: 0x2d671ebe UIKit`__44-[UIStatusBar _prepareToSetStyle:animation:]_block_invoke + 358
    frame #29: 0x2d5fc230 UIKit`+[UIView(Animation) performWithoutAnimation:] + 72
    frame #30: 0x2d66fcf4 UIKit`-[UIStatusBar _prepareToSetStyle:animation:] + 688
    frame #31: 0x2d6579ca UIKit`-[UIStatusBar _requestStyleAttributes:animationParameters:] + 290
    frame #32: 0x2d65696e UIKit`-[UIStatusBar requestStyle:animated:] + 86
    frame #33: 0x2d65559a UIKit`-[UIApplication _createStatusBarWithRequestedStyle:orientation:hidden:] + 406
    frame #34: 0x2d85122a UIKit`-[UIApplication _runWithMainScene:transitionContext:completion:] + 970
    frame #35: 0x2d85bc68 UIKit`__84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke + 36
    frame #36: 0x2d84fc5a UIKit`-[UIApplication workspaceDidEndTransaction:] + 130
    frame #37: 0x3086c0e0 FrontBoardServices`__31-[FBSSerialQueue performAsync:]_block_invoke + 12
    frame #38: 0x2a13782c CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    frame #39: 0x2a136af0 CoreFoundation`__CFRunLoopDoBlocks + 216
    frame #40: 0x2a13564a CoreFoundation`__CFRunLoopRun + 1714
    frame #41: 0x2a082db0 CoreFoundation`CFRunLoopRunSpecific + 476
    frame #42: 0x2a082bc2 CoreFoundation`CFRunLoopRunInMode + 106
    frame #43: 0x2d653c36 UIKit`-[UIApplication _run] + 558
    frame #44: 0x2d64ea30 UIKit`UIApplicationMain + 1440
  * frame #45: 0x003b4ec2 Stox`main(argc=1, argv=0x01200b08) + 178 at main.m:17

Troisième:

 thread #1: tid = 0x1d96b, 0x36fbf540 libc++abi.dylib`__cxa_throw, queue = 'com.Apple.main-thread', stop reason = breakpoint 3.2
    frame #0: 0x36fbf540 libc++abi.dylib`__cxa_throw
    frame #1: 0x30798c22 libTrueTypeScaler.dylib`ScalerNewBlock(memoryContext*, long, long, void*, unsigned char, unsigned char) + 430
    frame #2: 0x3077e172 libTrueTypeScaler.dylib`OutlineToPath(memoryContext*, fnt_ElementType const*) + 178
    frame #3: 0x3079502a libTrueTypeScaler.dylib`ObtainDesiredOutline(memoryContext*, fnt_ElementType const*, unsigned long, void**) + 10
    frame #4: 0x3077e07c libTrueTypeScaler.dylib`RenderPath(fsg_SplineKey*, memoryContext*, scalerGlyph const*) + 36
    frame #5: 0x3077c980 libTrueTypeScaler.dylib`TTRenderGlyphs + 436
    frame #6: 0x306c5722 libFontParser.dylib`TConcreteFontScaler::CopyGlyphPath(unsigned short, CGAffineTransform const*) const + 378
    frame #7: 0x306a0ce6 libFontParser.dylib`FPFontCopyGlyphPath + 494
    frame #8: 0x2a3abb4a CoreGraphics`CGFontCreateGlyphPath + 30
    frame #9: 0x2a3aba56 CoreGraphics`CGFontCreateGlyphBitmap + 266
    frame #10: 0x2a3b3c1a CoreGraphics`CGGlyphBuilder::create_missing_bitmaps(CGGlyphIdentifier const*, unsigned long, CGGlyphBitmap const**) + 82
    frame #11: 0x2a6fd4dc libRIP.A.dylib`render_glyphs + 172
    frame #12: 0x2a6fcaca libRIP.A.dylib`draw_glyph_bitmaps + 906
    frame #13: 0x2a6fc430 libRIP.A.dylib`ripc_DrawGlyphs + 1108
    frame #14: 0x2a3a1002 CoreGraphics`draw_glyphs + 274
    frame #15: 0x2aaae268 CoreText`DrawSbixGlyphsAtPositions(TFont const*, CGFont*, TCFRef<__CFData const*> const&, unsigned short const*, CGPoint const*, unsigned long, CGContext*, CGAffineTransform, CGAffineTransform) + 1880
    frame #16: 0x2aa6bcce CoreText`CTFontDrawGlyphsWithAdvances + 470
    frame #17: 0x349eba1a UIFoundation`__NSStringDrawingEngine + 6710
    frame #18: 0x349efa64 UIFoundation`-[NSAttributedString(NSExtendedStringDrawing) drawWithRect:options:context:] + 532
    frame #19: 0x2d603370 UIKit`-[UILabel _drawTextInRect:baselineCalculationOnly:] + 4440
    frame #20: 0x2d668ed4 UIKit`-[UILabel drawTextInRect:] + 488
    frame #21: 0x2d668ce8 UIKit`-[UILabel drawRect:] + 84
    frame #22: 0x2d668c70 UIKit`-[UIView(CALayerDelegate) drawLayer:inContext:] + 400
    frame #23: 0x2d045910 QuartzCore`-[CALayer drawInContext:] + 228
    frame #24: 0x2d02f350 QuartzCore`CABackingStoreUpdate_ + 2068
    frame #25: 0x2d110b6c QuartzCore`___ZN2CA5Layer8display_Ev_block_invoke + 52
    frame #26: 0x2d02eb34 QuartzCore`x_blame_allocations + 88
    frame #27: 0x2d02e7e4 QuartzCore`CA::Layer::display_() + 1156
    frame #28: 0x2d012d9c QuartzCore`CA::Layer::display_if_needed(CA::Transaction*) + 200
    frame #29: 0x2d012a60 QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 24
    frame #30: 0x2d012446 QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 222
    frame #31: 0x2d012250 QuartzCore`CA::Transaction::commit() + 324
    frame #32: 0x2d5e51c8 UIKit`_afterCACommitHandler + 132
    frame #33: 0x2a137844 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20
    frame #34: 0x2a134f28 CoreFoundation`__CFRunLoopDoObservers + 276
    frame #35: 0x2a13532a CoreFoundation`__CFRunLoopRun + 914
    frame #36: 0x2a082db0 CoreFoundation`CFRunLoopRunSpecific + 476
    frame #37: 0x2a082bc2 CoreFoundation`CFRunLoopRunInMode + 106
    frame #38: 0x313e7050 GraphicsServices`GSEventRunModal + 136
    frame #39: 0x2d64ea30 UIKit`UIApplicationMain + 1440
  * frame #40: 0x003b4ec2 Stox`main(argc=1, argv=0x01200b08) + 178 at main.m:17
46
MCMatan

Je venais juste de connaître exactement le même problème et de retrouver le problème. 

Assurez-vous que toutes les polices que vous spécifiez dans votre Info.plist sous Fonts provided by this application se trouvent bien dans votre groupe d'applications.

69
nmock

Comme le montre la trace, l'application ne s'est pas arrêtée sans raison. Il s'est arrêté car une exception a été levée et ressemble à une exception C++. 

Contrairement à Objective-C, où les exceptions ne devraient être levées qu'à la suite d'erreurs de programmation et sont donc très rares, il existe beaucoup de code C++ qui lève et intercepte beaucoup d'exceptions. Dans cette situation, il est probablement préférable de définir un point d'arrêt uniquement sur les exceptions Objective-C, et non sur toutes les exceptions. 

39
gnasher729

Il existe un moyen plus précis de localiser la police suspecte dans votre application à l'aide du débogueur et du fait qu'il est facilement arrêté lors de l'appel.

Étape 1: reproduire le point d'arrêt __cxa_throw

Cela se produit généralement lors de l'instanciation d'un des objets UIView (ou éventuellement du premier) dans votre application. Vous verrez que le débogueur est cassé et vous aurez une pile comme celle-ci:

 Stack Trace of exception loading font

Étape 2: Sélectionnez l'entrée dans la trace de la pile avec le symbole FPFontCreateFontsWithPath

Dans mon cas, cette entrée était la ligne 7 de la pile.

 Selected Stack Entry

Si vous regardez le démontage, vous remarquerez la signature de fonction de cette entrée:

 Stack Entry showing function signature symbols

Ah cool! On dirait qu'il faut des cordes en C. Je parie que l'un d'entre eux est aussi un chemin de fichiers!

Étape 3: localisez cette chaîne dans la mémoire de l'application

J'exécute ceci dans un simulateur (x86_64) qui, sur mon ordinateur, stocke les arguments de la fonction dans certains registres commençant par r. Plus de détails sur les registres ici .

 General Purpose Registers

Appuyez sur Maj + Commande + M ou sélectionnez l'option "Débogage> Processus de débogage> Afficher la mémoire" dans le menu.

Au bas de cette vue, parcourez les registres un par un et entrez les adresses. Dans mon cas, r14 contenait le chemin du fichier.

 Memory location of filepath

Bon, maintenant je connais la police qui a été gâchée. Il cherche HelveticaNeue.ttc. Trouvons la référence à cela dans le projet.

Ouvrez un terminal, accédez à votre projet et exécutez:

$ ~/W/X/project> grep -R "HelveticaNeue" ./
.//MyProject/Main.Storyboard:        <array key="HelveticaNeue.ttc">
.//MyProject/Main.Storyboard:            <string>HelveticaNeue</string>
.//MyProject/Main.Storyboard:                                <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="18"/>

Génial, maintenant, basculez ceux-ci vers le système en remplaçant name="HelveticaNeue" family="Helvetica Neue" par type="system", ouvrez le scénario et modifiez-les manuellement ou ajoutez une référence à la police manquante dans votre application (info.plist et cible). 

Étape 4: Célébrez ???? ???? ???? ????

39
Sandy Chapman

Si vous n'avez pas trouvé de problème dans le fichier .plist, le problème provient peut-être de votre fichier .storyboard .. Ouvrez-le en tant que code source à partir de Xcode ou dans textView à partir de Finder - Recherchez <customFonts key="customFonts"> J'y avais quelques vieux tableaux/polices non pertinents à l'intérieur ... :) juste supprimés et il s'est arrêté

3
DaNLtR

Dans mon cas, la référence était à l'intérieur xcuserdata:

user$ grep -R "HelveticaNeue" ./
Binary file .//MyProject.xcworkspace/xcuserdata/user.xcuserdatad/UserInterfaceState.xcuserstate matches
2
Aleksandr Borshchenko

J'ai résolu ce problème en combinant la réponse de nmock avec la réponse de DaNLtR

Donc au début, j'ai cherché <customFonts key="customFonts"> et il y avait Montserrat-Light présent.
Mais cela n’était ni présent dans info.plist ni ajouté au projet. 

Le problème a disparu une fois que j'ai intégré Montserrat-Light.ttf dans le projet et que j'ai ajouté une entrée pour cette police sous Fonts provided by this application dans info.plist

Voici donc le résumé de la solution mentionnée ci-dessus: 

  1. Recherchez vos fichiers Storyboard ou Xib pour toutes les polices personnalisées.
    Vous les trouverez dans <customFonts key="customFonts"> 
  2. Si réellement une police personnalisée a été mentionnée, suivez les étapes 3 et 4. 
  3. Ajoutez la police à votre projet Xcode. 
  4. Ajoutez une entrée à info.plist sous Fonts provided by this application.
    Cette entrée doit être le nom du fichier de police suivi de son extension. 
  5. Si <customFonts key="customFonts"> ne contient aucune police personnalisée (par exemple, Helvetica-Neue, etc.), essayez de supprimer l'entrée <customFonts key="customFonts"> du fichier Stroyboard ou Xib comme indiqué dans La réponse de DaNLtR

Je sais qu'il est très tard pour répondre, mais j'espère que cela aidera quelqu'un.

0
S1LENT WARRIOR

Une exception est générée, mais l'appelant (par exemple, dans libFontParser et libTrueTypeScaler) le gère et n'atteint pas votre programme.

À moins que vous ne voyiez d'autres preuves d'un problème (tel qu'un message de journal) ou que l'exception parvienne à votre programme, supposez que l'implémentation le gère. Vous pouvez continuer au-delà de ces instances dans le débogueur sans souci.

0
justin