2017-02-09 4 views
1

есть,Как найти связанный код по вызову stack в xcode?

Я новичок в ios и получаю журнал сбоев следующим образом.

Мой вопрос: что означает «+ 373» в «[ICLRootViewController addHomeScreenViewController] + 373"? как найти соответствующую строку в ICLRootViewController.m? Строка 373 не имеет отношения к функции addHomeScreenViewController().

 
2017-02-09 16:23:28.117 Demo[98834:4764956] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Can't find view controller.' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0000000111f77d4b __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x0000000110dfb21e objc_exception_throw + 48 
    2 CoreFoundation      0x0000000111f7be42 +[NSException raise:format:arguments:] + 98 
    3 Foundation       0x000000010cda066d -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195 
    4 Demo        0x0000000109bb63c5 -[ICLRootViewController addHomeScreenViewController] + 373 
    5 Demo        0x0000000109bc252e -[ICLRootViewController onNewsButtonClicked] + 542 
    6 Demo        0x0000000109a2b9ce __51-[ICLHomeScreenToolbarViewController initWebToolbar]_block_invoke_2 + 62 
    7 Demo        0x0000000109dee0f1 -[ICLWebViewToolbar didClickNewsButton:] + 305 
    8 UIKit        0x000000010f5b18bc -[UIApplication sendAction:to:from:forEvent:] + 83 
    9 UIKit        0x000000010f737c38 -[UIControl sendAction:to:forEvent:] + 67 
    10 UIKit        0x000000010f737f51 -[UIControl _sendActionsForEvents:withEvent:] + 444 
    11 UIKit        0x000000010f736e4d -[UIControl touchesEnded:withEvent:] + 668 
    12 UIKit        0x000000010f61f545 -[UIWindow _sendTouchesForEvent:] + 2747 
    13 UIKit        0x000000010f620c33 -[UIWindow sendEvent:] + 4011 
    14 Demo        0x0000000109a96a80 -[ICLInteractionDetectionWindow sendEvent:] + 688 
    15 UIKit        0x000000010f5cd9ab -[UIApplication sendEvent:] + 371 
    16 UIKit        0x000000010fdba72d __dispatchPreprocessedEventFromEventQueue + 3248 
    17 UIKit        0x000000010fdb3463 __handleEventQueue + 4879 
    18 CoreFoundation      0x0000000111f1c761 __CFRUNLOICL_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    19 CoreFoundation      0x0000000111f0198c __CFRunLoopDoSources0 + 556 
    20 CoreFoundation      0x0000000111f00e76 __CFRunLoopRun + 918 
    21 CoreFoundation      0x0000000111f00884 CFRunLoopRunSpecific + 420 
    22 GraphicsServices     0x000000011473ba6f GSEventRunModal + 161 
    23 UIKit        0x000000010f5afc68 UIApplicationMain + 159 
    24 Demo        0x000000010981da1f main + 111 
    25 libdyld.dylib      0x0000000113ccd68d start + 1 

спасибо большое!

+2

Причина: «Не удается найти контроллер представления». –

+0

Что вы пытаетесь сделать? –

+0

@AbhishekGupta um, я имею в виду, как восстановить журнал сбоев и найти, какая строка кода делает этот сбой. – iclinux

ответ

-3

возможно, вы можете найти ответ в 4-й строке дисплея,

4 Demo        0x0000000109bb63c5 -[ICLRootViewController addHomeScreenViewController] + 373

где последний код в проекте, которые работают

0
  • 373 является смещение от начало символа функции, указанного в обратном направлении. Репортер сбоев не имел доступа к отладочной информации, поэтому он не мог выполнять перевод с адреса на исходные строки.

Если у вас есть бинарный файл, который показывает этот сбой, и это dSYM, вы можете понять это вручную. Вы не сможете ничего сказать об абсолютных адресах при сбое, так как macOS и iOS рандомизируют места загрузки. Поэтому использование формы «символ + смещение» удобно. Таким образом, загрузить двоичный & dSYM в отладчик и сделать:

(lldb) disassemble -m -n "-[ICLRootViewController addHomeScreenViewController]" 

Этой команда будет разобрать код для функции переданной -n аргумента, иллюстрирующего смешанного источник & вида сборки этого метода. Вывод сборки будет указан со смещениями, так что просто найдите <+373>, а исходные строки над ним покажут вам, откуда он. Если это оптимизированный код, сопоставление адресов источника -> может иногда вводить в заблуждение, но смешанное представление может помочь вам разобраться с этим.