objective-c - 崩溃日志中的 "Application Specific Backtrace"是什么?

标签 objective-c macos debugging

我注意到在我的应用程序在 OS X 上的崩溃日志中,第一部分之一是“特定于应用程序的回溯”。它显示如下内容:

Application Specific Backtrace 1:
0   CoreFoundation                      0x00007fff8acef716 __exceptionPreprocess + 198
1   libobjc.A.dylib                     0x00007fff8d723470 objc_exception_throw + 43
2   CoreFoundation                      0x00007fff8ad7df07 -[__NSDictionaryM setObject:forKey:] + 135
3   My App                              0x00000001030c6f72 My App + 81778
4   My App                              0x00000001030c7969 My App + 84329
5   AppKit                              0x00007fff8c3d5afa -[NSIBObjectData nibInstantiateWithOwner:topLevelObjects:] + 1012
6   AppKit                              0x00007fff8c5ec1d6 -[NSNib _instantiateNibWithExternalNameTable:] + 610
7   AppKit                              0x00007fff8c5ebf43 -[NSNib instantiateNibWithOwner:topLevelObjects:] + 254
8   AppKit                              0x00007fff8c5eb4f7 -[NSViewController loadView] + 184
9   AppKit                              0x00007fff8c593349 -[NSViewController view] + 41
10  My App                              0x00000001030cae69 My App + 97897
11  My App                              0x00000001030cbb3a My App + 101178
12  AppKit                              0x00007fff8c590322 -[NSTableView _sendDelegateHeightOfRow:] + 130
13  AppKit                              0x00007fff8c5900db -[NSTableView _uncachedRectHeightOfRow:] + 197
14  AppKit                              0x00007fff8c58ff2c -[_NSTableRowHeightStorage _cacheRowHeights] + 163
15  AppKit                              0x00007fff8c54a6f5 -[_NSTableRowHeightStorage _ensureRowHeights] + 80
16  AppKit                              0x00007fff8c5680cb -[_NSTableRowHeightStorage computeRowAtPoint:] + 38
17  AppKit                              0x00007fff8c567fd9 -[NSTableView rowAtPoint:] + 306
18  AppKit                              0x00007fff8c566af7 -[NSTableView rowsInRect:] + 375
19  AppKit                              0x00007fff8c597ca4 _NSTVVisibleRowsForUpdate + 673
20  AppKit                              0x00007fff8c5971e5 -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 96
21  AppKit                              0x00007fff8c597001 -[NSTableRowData updateVisibleRowViews] + 119
22  AppKit                              0x00007fff8c56f0fb -[NSTableView viewWillDraw] + 165
23  AppKit                              0x00007fff8c44cbed __22-[NSView viewWillDraw]_block_invoke_0 + 307
24  CoreFoundation                      0x00007fff8ace80b6 __NSArrayEnumerate + 582
25  AppKit                              0x00007fff8c44c92d -[NSView viewWillDraw] + 244
26  AppKit                              0x00007fff8c44bf84 -[NSView _sendViewWillDrawInRect:clipRootView:] + 1525
27  AppKit                              0x00007fff8c4183f1 -[NSView displayIfNeeded] + 1044
28  AppKit                              0x00007fff8c4c429e -[NSClipView _immediateScrollToPoint:] + 7852
29  AppKit                              0x00007fff8c4c2342 -[NSClipView scrollToPoint:] + 268
30  AppKit                              0x00007fff8c58acdd -[NSScrollView scrollClipView:toPoint:] + 426
31  AppKit                              0x00007fff8c4c20cc -[NSClipView _scrollTo:animateScroll:flashScrollerKnobs:] + 1626
32  AppKit                              0x00007fff8c39d579 -[NSClipView _scrollTo:animate:] + 28
33  AppKit                              0x00007fff8caab2a1 __31-[NSScrollView _snapRubberBand]_block_invoke_0610 + 1989
34  AppKit                              0x00007fff8ca2412a ____NSPeriodicInvokerScheduled_block_invoke_0 + 57
35  libdispatch.dylib                   0x00007fff8a013f3d _dispatch_call_block_and_release + 15
36  libdispatch.dylib                   0x00007fff8a0100fa _dispatch_client_callout + 8
37  libdispatch.dylib                   0x00007fff8a0149ab _dispatch_after_timer_callback + 22
38  libdispatch.dylib                   0x00007fff8a0100fa _dispatch_client_callout + 8
39  libdispatch.dylib                   0x00007fff8a0122d7 _dispatch_source_invoke + 691
40  libdispatch.dylib                   0x00007fff8a011349 _dispatch_queue_invoke + 72
41  libdispatch.dylib                   0x00007fff8a0150cd _dispatch_main_queue_callback_4CF + 220
42  CoreFoundation                      0x00007fff8ac9181e __CFRunLoopRun + 1614
43  CoreFoundation                      0x00007fff8ac90dd2 CFRunLoopRunSpecific + 290
44  HIToolbox                           0x00007fff85323774 RunCurrentEventLoopInMode + 209
45  HIToolbox                           0x00007fff85323512 ReceiveNextEventCommon + 356
46  HIToolbox                           0x00007fff853233a3 BlockUntilNextEventMatchingListInMode + 62
47  AppKit                              0x00007fff8c414fa3 _DPSNextEvent + 685
48  AppKit                              0x00007fff8c414862 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
49  AppKit                              0x00007fff8c40bc03 -[NSApplication run] + 517
50  AppKit                              0x00007fff8c3b0656 NSApplicationMain + 869
51  My App                              0x00000001030b4554 My App + 5460
52  ???                                 0x0000000000000002 0x0 + 2

我知道那是在主线程上运行的代码,但它显示在那个部分而不是线程 0 回溯中,它看起来像这样:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib          0x00007fff8588d212 __pthread_kill + 10
1   libsystem_c.dylib               0x00007fff8e1fab34 pthread_kill + 90
2   libsystem_c.dylib               0x00007fff8e23edfa abort + 143
3   libc++abi.dylib                 0x00007fff888abf87 abort_message + 257
4   libc++abi.dylib                 0x00007fff888a9936 default_terminate() + 28
5   libobjc.A.dylib                 0x00007fff8d7238f3 _objc_terminate() + 91
6   libc++.1.dylib                  0x00007fff8694c8fe std::terminate() + 20
7   libobjc.A.dylib                 0x00007fff8d72365e objc_terminate + 9
8   libdispatch.dylib               0x00007fff8a01010e _dispatch_client_callout + 28
9   libdispatch.dylib               0x00007fff8a0149ab _dispatch_after_timer_callback + 22
10  libdispatch.dylib               0x00007fff8a0100fa _dispatch_client_callout + 8
11  libdispatch.dylib               0x00007fff8a0122d7 _dispatch_source_invoke + 691
12  libdispatch.dylib               0x00007fff8a011349 _dispatch_queue_invoke + 72
13  libdispatch.dylib               0x00007fff8a0150cd _dispatch_main_queue_callback_4CF + 220
14  com.apple.CoreFoundation        0x00007fff8ac9181e __CFRunLoopRun + 1614
15  com.apple.CoreFoundation        0x00007fff8ac90dd2 CFRunLoopRunSpecific + 290
16  com.apple.HIToolbox             0x00007fff85323774 RunCurrentEventLoopInMode + 209
17  com.apple.HIToolbox             0x00007fff85323512 ReceiveNextEventCommon + 356
18  com.apple.HIToolbox             0x00007fff853233a3 BlockUntilNextEventMatchingListInMode + 62
19  com.apple.AppKit                0x00007fff8c414fa3 _DPSNextEvent + 685
20  com.apple.AppKit                0x00007fff8c414862 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
21  com.apple.AppKit                0x00007fff8c40bc03 -[NSApplication run] + 517
22  com.apple.AppKit                0x00007fff8c3b0656 NSApplicationMain + 869
23  com.mycompany.myapp             0x00000001030b4554 0x1030b3000 + 5460

“Application Specific Backtrace”的意义是什么?为什么主线程回溯中没有包含该代码?

(明确地说,我不是在问如何调试这段代码,我只是在寻找关于崩溃日志本身的结构和含义的解释。谢谢!)

最佳答案

这就是异常处理的工作原理。您在创建 NSException 的主线程上有一个异常(它包含有关异常的所有信息,包括当前堆栈跟踪)。抛出异常后,对象控制被传递到调用堆栈中最近的处理程序,展开抛出点和捕获点之间的堆栈。如果没有捕获到异常,它会被称为未捕获异常处理程序的函数拦截。未捕获的异常处理程序总是导致程序退出,但可能在此之前执行一些任务。 默认的未捕获异常处理程序在退出程序之前向控制台记录一条消息。

因此,在您的情况下,Application Specific Backtrace 是抛出异常时的堆栈跟踪,Thread 0 Crashed::Dispatch queue: com.apple.main-thread 是堆栈跟踪应用何时被杀死。

请注意,到目前为止,堆栈跟踪是相同的:

10  libdispatch.dylib               0x00007fff8a0100fa _dispatch_client_callout + 8
11  libdispatch.dylib               0x00007fff8a0122d7 _dispatch_source_invoke + 691
12  libdispatch.dylib               0x00007fff8a011349 _dispatch_queue_invoke + 72
13  libdispatch.dylib               0x00007fff8a0150cd _dispatch_main_queue_callback_4CF + 220
14  com.apple.CoreFoundation        0x00007fff8ac9181e __CFRunLoopRun + 1614
15  com.apple.CoreFoundation        0x00007fff8ac90dd2 CFRunLoopRunSpecific + 290
16  com.apple.HIToolbox             0x00007fff85323774 RunCurrentEventLoopInMode + 209
17  com.apple.HIToolbox             0x00007fff85323512 ReceiveNextEventCommon + 356
18  com.apple.HIToolbox             0x00007fff853233a3 BlockUntilNextEventMatchingListInMode + 62
19  com.apple.AppKit                0x00007fff8c414fa3 _DPSNextEvent + 685
20  com.apple.AppKit                0x00007fff8c414862 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
21  com.apple.AppKit                0x00007fff8c40bc03 -[NSApplication run] + 517
22  com.apple.AppKit                0x00007fff8c3b0656 NSApplicationMain + 869

关于objective-c - 崩溃日志中的 "Application Specific Backtrace"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11850868/

相关文章:

objective-c - NSWindow 在单击、调整大小等之前不会绘制

iphone - 动画导航 Controller 'back' 按钮

ios - IOS中的POST方法问题

ios - Objective-C 单例 GCD - [self alloc] 或 [Class alloc]

linux - 如何知道给定的共享库是否使用调试符号构建?

c# - 是否有一些调试工具可以在平面表格中显示结果

macos - 从 Spotlight 索引中排除文件夹 - 通过命令行

java - 在 OS X 上运行 Maven 时 ${java.home} 发生变化

sql - 什么是适用于 Mac OSX 的 Toad 的良好替代品?

android - android调试器丢失怎么办?