Подтвердить что ты не робот

Вся точка исключения исключений останавливается без причины на симуляторе

Это очень раздражает, каждый раз, когда я пытаюсь отлаживать симулятор с "всей точкой исключения исключения", приложение останавливается без причины в этой строке:

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

Кто-нибудь еще нашел, что он сам борется с этой проблемой?

Спасибо!

ИЗМЕНИТЬ

Обратный след при первом броске:

 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

Третье:

 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
4b9b3361

Ответ 1

Я просто испытывал ту же самую проблему и отслеживал эту проблему.

Убедитесь, что все шрифты, которые вы указали в Info.plist под Fonts provided by this application, действительно находятся в вашем приложении.

Ответ 2

Как показывает обратная трассировка, приложение не останавливается без причины. Он остановился, потому что было выбрано исключение, и это похоже на исключение С++.

В отличие от Objective-C, где исключения должны быть выброшены только в результате ошибок программирования и, следовательно, очень редки, существует много кода на С++, который вызывает и исключает множество исключений. В этой ситуации, вероятно, лучше всего установить только точку останова на исключениях Objective-C, а не все исключения.

Ответ 3

Существует более точный способ отслеживания подозрительного шрифта в вашем приложении с помощью отладчика и того факта, что он удобно останавливается при вызове.

Шаг 1: Воспроизведите точку останова __cxa_throw

Обычно это происходит при создании одного из (или, возможно, первого) объекта UIView в вашем приложении. Вы увидите, что ваш отладчик сломался, и у вас будет такой стек:

Stack Trace of exception loading font

Шаг 2: Выберите запись в трассировке стека с помощью символа FPFontCreateFontsWithPath

В моем случае эта запись была строкой 7 в стеке.

Selected Stack Entry

Если вы посмотрите на разборку, вы заметите подпись функции этой записи:

Stack Entry showing function signature symbols

Ах, круто! Похоже, это занимает несколько строк C. Бьюсь об заклад, один из них тоже есть путь к файлу!

Шаг 3. Найдите эту строку в памяти приложения.

Я запускаю это в (x86_64) симуляторе, который на моем компьютере хранит аргументы функции в некоторых регистрах, начиная с r. Подробнее о регистрах здесь.

General Purpose Registers

Либо нажмите Shift + Command + M, либо выберите в меню пункт "Отладка> Рабочий процесс отладки> Просмотр памяти".

Внизу этого представления, просмотрите регистры один за другим и введите адреса. В моем случае r14 содержал путь к файлу.

Memory location of filepath

Хорошо, теперь я знаю, какой шрифт испортился. Это ищет HelveticaNeue.ttc. Давайте найдем ссылку на это в проекте.

Откройте терминал, перейдите к своему проекту и запустите:

$ ~/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"/>

Отлично, теперь либо переключите их на систему, заменив name="HelveticaNeue" family="Helvetica Neue" на type="system", откройте раскадровку и отредактируйте их вручную или добавьте ссылку на отсутствующий шрифт в свое приложение (info.plist и цель).

Шаг 4: Празднуйте 🎉 🎊 🍾 🍻

Ответ 4

Если вы не нашли проблему в файле .plist, возможно, проблема в вашем файле .storyboard. Откройте его как исходный код из Xcode или в textView из Finder - поиск <customFonts key="customFonts"> У меня там был какой-то старый нерелевантный массив/шрифт внутри...:) просто удалил его, и он остановился

Ответ 5

В моем случае ссылка была внутри xcuserdata:

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

Ответ 6

Вызывается исключение, но вызывающий (например, в libFontParser и libTrueTypeScaler) обрабатывает его, и он не достигает вашей программы.

Если вы не видите другие доказательства проблемы (например, сообщение журнала) или исключение достигает вашей программы, предположите, что реализация обрабатывает ее. Вы можете беспрепятственно пропустить эти экземпляры в отладчике.

Ответ 7

Я решил эту проблему, объединив ответ nmock с ответом DaNLtR.

Поэтому сначала я искал <customFonts key="customFonts"> и в нем присутствовал Montserrat-Light.
Но его не было ни в info.plist, ни в проекте.

Проблема исчезла, когда я Montserrat-Light.ttf в проект и добавил запись для этого шрифта в разделе Fonts provided by this application в info.plist.

Ниже приводится краткое изложение вышеупомянутого решения:

  1. Ищите файлы Storyboard или Xib для любых пользовательских шрифтов.
    Вы найдете их в <customFonts key="customFonts">
  2. Если упоминается " Фактически пользовательский шрифт", выполните шаги 3 и 4.
  3. Добавьте шрифт в ваш проект Xcode.
  4. Добавить запись в info.plist под Fonts provided by this application.
    Эта запись должна быть именем файла шрифта с последующим расширением.
  5. Если <customFonts key="customFonts"> не содержит никакого пользовательского шрифта (например, Helvetica-Neue и т.д.), Попробуйте удалить <customFonts key="customFonts"> в Stroyboard или Xib как указано в ответе DaNLtR

Я знаю, что очень поздно отвечать, но надеюсь, что это кому-то поможет.