我(在ITC中)下面提供了我的第一个Mac App Store应用程序的崩溃报告。
使用基于Stackoverflow的知识我试图象征这个日志,但是(使用atos和otool)我只能读取最后一行(20)(意味着start (in My App) + 52
)。
我真的不知道如何解释上面的行,以及如何找到崩溃的原因。
Process: My App [270]
Identifier: com.mycompany.myapp
Version: 1.0.0 (1.0.0)
App Item ID: 568750000
App External ID: 11410000
Code Type: X86-64 (Native)
Parent Process: launchd [143]
User ID: 501
Date/Time: 2012-11-07 19:21:11.365 -0200
OS Version: Mac OS X 10.8.2 (12C60)
Report Version: 10
Per-App Interval Since Last Report: 1232 sec
Per-App Crashes Since Last Report: 1
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: EXC_I386_GPFLT
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x00007fff877a5256 objc_msgSend + 22
1 com.apple.AppKit 0x00007fff8dac6e27 -[NSOutlineView _delegate_isGroupRow:] + 66
2 com.apple.AppKit 0x00007fff8da46878 -[NSTableView _isGroupRow:] + 81
3 com.apple.AppKit 0x00007fff8da41fad -[NSTableView _isSourceListGroupRow:] + 56
4 com.apple.AppKit 0x00007fff8da418e8 -[NSTableView rectOfRow:] + 288
5 com.apple.AppKit 0x00007fff8da5b3cb _NSTVVisibleRowsForUpdate + 296
6 com.apple.AppKit 0x00007fff8da5aa85 -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 96
7 com.apple.AppKit 0x00007fff8da5a8a1 -[NSTableRowData updateVisibleRowViews] + 119
8 com.apple.AppKit 0x00007fff8da6e463 -[NSTableRowData _idleUpdateVisibleRows] + 66
9 com.apple.CoreFoundation 0x00007fff87547da4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
10 com.apple.CoreFoundation 0x00007fff875478bd __CFRunLoopDoTimer + 557
11 com.apple.CoreFoundation 0x00007fff8752d099 __CFRunLoopRun + 1513
12 com.apple.CoreFoundation 0x00007fff8752c6b2 CFRunLoopRunSpecific + 290
13 com.apple.HIToolbox 0x00007fff830a30a4 RunCurrentEventLoopInMode + 209
14 com.apple.HIToolbox 0x00007fff830a2e42 ReceiveNextEventCommon + 356
15 com.apple.HIToolbox 0x00007fff830a2cd3 BlockUntilNextEventMatchingListInMode + 62
16 com.apple.AppKit 0x00007fff8d8d8613 _DPSNextEvent + 685
17 com.apple.AppKit 0x00007fff8d8d7ed2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
18 com.apple.AppKit 0x00007fff8d8cf283 -[NSApplication run] + 517
19 com.apple.AppKit 0x00007fff8d873cb6 NSApplicationMain + 869
20 com.mycompany.myapp 0x000000010f29ce1c 0x10f29b000 + 7708
答案 0 :(得分:39)
读取代码中不存在的堆栈框架通常会在阅读茶叶边框时出现问题,但在这种情况下,发生的情况非常清楚。
我将把你的崩溃日志读给你,随着时间的推移进行翻译。
堆栈是自下而上构建的(就像现实世界中的堆栈一样)。我会切入追逐:
10 com.apple.CoreFoundation 0x00007fff875478bd __CFRunLoopDoTimer + 557 9 com.apple.CoreFoundation 0x00007fff87547da4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
计时器被解雇。
8 com.apple.AppKit 0x00007fff8da6e463 -[NSTableRowData _idleUpdateVisibleRows] + 66 7 com.apple.AppKit 0x00007fff8da5a8a1 -[NSTableRowData updateVisibleRowViews] + 119 6 com.apple.AppKit 0x00007fff8da5aa85 -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 96 5 com.apple.AppKit 0x00007fff8da5b3cb _NSTVVisibleRowsForUpdate + 296
在此计时器中(可能设置为在空闲时间内触发),表视图会尝试更新其对哪些行可见的了解。
(最后一帧是澄清它正在更新哪些行是可见的,而不是更新可见的行。你可以从函数名称的措辞来判断。)
4 com.apple.AppKit 0x00007fff8da418e8 -[NSTableView rectOfRow:] + 288
要确定行是否可见,视图需要确定该行在其边界内的位置(可能与滚动视图中的可见矩形相交)。
为此,表视图试图找出该行的特征:
3 com.apple.AppKit 0x00007fff8da41fad -[NSTableView _isSourceListGroupRow:] + 56
是源列表组行吗?
2 com.apple.AppKit 0x00007fff8da46878 -[NSTableView _isGroupRow:] + 81
是否有任何群组行?
1 com.apple.AppKit 0x00007fff8dac6e27 -[NSOutlineView _delegate_isGroupRow:] + 66
我们问代表。
0 libobjc.A.dylib 0x00007fff877a5256 objc_msgSend + 22
尝试发送消息。这是您的流程崩溃的地方。
因此,在大纲视图尝试向其委托发送消息时发生了崩溃。
由此,我们可以得出三个事实:
使用Instruments的Zombies模板来确定大纲视图尝试与之对话的对象,并查看该对象的历史记录以查找杀死它的过度或不平衡的版本。您可能需要在某处添加该对象的强大所有权。