好吧,所以我收到了我的一个应用程序的崩溃报告,但我发誓我100%困惑。
这就是它的"核心"部分:
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000
VM Regions Near 0:
-->
__TEXT 0000000100000000-0000000100015000 [ 84K] r-x/rwx SM=COW /Applications/MY_APP/Contents/MacOS/MY_APP
Application Specific Information:
objc[337]: garbage collection is ON
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_c.dylib 0x00007fff90128650 strlen + 16
1 MY_BUNDLE_ID 0x0000000100008f12 0x100000000 + 36626
2 MY_BUNDLE_ID 0x000000010000b435 0x100000000 + 46133
3 MY_BUNDLE_ID 0x0000000100003c90 0x100000000 + 15504
4 com.apple.CoreFoundation 0x00007fff9065147a _CFXNotificationPost + 2554
5 com.apple.Foundation 0x00007fff8e5fe846 -[NSNotificationCenter postNotificationName:object:userInfo:] + 64
6 com.apple.AppKit 0x00007fff9a7894a7 -[NSTableView textDidChange:] + 377
7 com.apple.CoreFoundation 0x00007fff9065147a _CFXNotificationPost + 2554
8 com.apple.Foundation 0x00007fff8e5fe846 -[NSNotificationCenter postNotificationName:object:userInfo:] + 64
9 com.apple.AppKit 0x00007fff9a15c260 -[NSTextView(NSSharing) didChangeText] + 339
10 com.apple.AppKit 0x00007fff9a7f8381 _NSDoUserReplaceForCharRange + 390
11 com.apple.AppKit 0x00007fff9a7f85b1 _NSDoUserDeleteForCharRange + 38
12 com.apple.AppKit 0x00007fff9a7e1e72 -[NSTextView(NSKeyBindingCommands) deleteBackward:] + 440
13 com.apple.AppKit 0x00007fff9a18a1cc -[NSResponder doCommandBySelector:] + 75
14 com.apple.AppKit 0x00007fff9a18a02e -[NSTextView doCommandBySelector:] + 197
15 com.apple.AppKit 0x00007fff9a20cf4e -[NSKeyBindingManager(NSKeyBindingManager_MultiClients) interpretEventAsCommand:forClient:] + 2200
16 com.apple.AppKit 0x00007fff9a20c3bb -[NSTextInputContext handleEvent:] + 939
17 com.apple.AppKit 0x00007fff9a20bf87 -[NSView interpretKeyEvents:] + 183
18 com.apple.AppKit 0x00007fff9a158f67 -[NSTextView keyDown:] + 723
19 com.apple.AppKit 0x00007fff9a374120 -[NSWindow sendEvent:] + 9687
20 com.apple.AppKit 0x00007fff9a36f744 -[NSApplication sendEvent:] + 5761
21 com.apple.AppKit 0x00007fff9a2852fa -[NSApplication run] + 636
22 com.apple.AppKit 0x00007fff9a229cb6 NSApplicationMain + 869
23 MY_BUNDLE_ID 0x0000000100002014 0x100000000 + 8212
你知道可能出了什么问题吗?或者你能给我指一个正确的方向吗?
作为旁白:
有人能指导我如何制作更多的0x00007fff90128650
吗。。。并使其(在将来的崩溃报告中)也显示函数的名称?
您的崩溃日志提供了大量信息:首先,您崩溃了,因为您试图访问ur程序中的地址0,而内核对此并不满意。
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000
看,你得到了一个分段,顺便说一下,它从0x00地址开始,所以这就像你直接访问一个0/nil指针。像这个
char* adress = 0;
printf("get %p", adress); // will output 0x0
printf("get %p", adress[0]); // will make a EXC_BAD_ACCESS
你真的应该专注于此。
从崩溃堆栈来看,有三件有趣的事情:
6 com.apple.AppKit 0x00007fff9a7894a7 -[NSTableView textDidChange:] + 377
5 com.apple.Foundation 0x00007fff8e5fe846 -[NSNotificationCenter postNotificationName:object:userInfo:] + 64
0 libsystem_c.dylib 0x00007fff90128650 strlen + 16
[textDidChange]是导致崩溃的最后一个电话之一,顺便说一句,当[textDidChange]被触发时,你会发送通知。最后一行真正导致崩溃:strlen+16是因为有人认为它可以从有效的指针地址中获得字符长度,但事实并非如此。
根据我的说法,你应该检查你在通知中发送的内容。
_NSDoUserReplaceForCharRange
_NSDoUserDeleteForCharRange
当你深入研究堆栈崩溃时,当你在tableViewController中插入/删除单元格时,它似乎真的会出现。你应该检查一下,有时有人推送无效数据,或者没有按照预期的方式使用编辑单元格
下面是简历:1有人编辑了一个表ViewCell,但他没有插入或代码没有插入它应该是什么。2您发送的通知中包含无效数据。3当strlen(invalid_dataStructure)被触发时,它会使你的应用程序崩溃
顺便说一句,我只是"猜测",因为我实际上不知道你的代码实现。但我希望它能为您的调试会话提供很多线索。
通常问题是您需要一个"retain"属性。
您需要为调试模式启用Zombies。在xCode 4中,单击"编辑方案"->"诊断"->"启用僵尸对象">
它将在控制台中显示崩溃时试图访问的"已删除"对象。
这应该会有所帮助。
你会看到这样的东西:
2010-01-25 14:35:24.840 MyApplication[1393:20b] *** -[CFString retain]: message sent to deallocated instance 0x42a5060
您还可以启用"Malloc日志记录",并在崩溃后在调试控制台中输入这样的命令:
shell malloc_history 1393 0x42a5060
在那里可以找到所有的alloc/release堆栈。看看release和alloc命令就知道了。
我收到了一份非常类似的崩溃报告,试图打开图形密集的应用程序(pymol和coot)(见下文)
我发现,如果我断开mac与外部显示器的连接,程序就会重新工作。我使用的是USB-HDMI连接器-显然这是个坏主意。我刚买了一个microUSB HDMI连接器,我希望它能更好地工作。如果我只是使用我的mac book自己的显示器,程序就会运行。
Time Awake Since Boot: 19000 seconds
Time Since Wake: 110 seconds
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000
VM Regions Near 0:
-->
__TEXT 0000000100000000-0000000100cff000 [ 13.0M] r-x/rwx SM=COW /Applications/MacPyMOL.app/Contents/MacOS/MacPyMOL
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 com.apple.opengl 0x00007fff8333857c CGLDescribeRenderer + 79
1 com.schrodinger.macpymol 0x000000010083c5b4 CheckOpenGLCaps + 484
2 com.schrodinger.macpymol 0x000000010084cd8c -[PyMOLOpenGLView awakeFromNib] + 1420
3 com.apple.CoreFoundation 0x00007fff8a10785f -[NSSet makeObjectsPerformSelector:] + 223
4 com.apple.AppKit 0x00007fff88b935cd -[NSIBObjectData nibInstantiateWithOwner:options:topLevelObjects:] + 1216
5 com.apple.AppKit 0x00007fff886a3605 loadNib + 384
6 com.apple.AppKit 0x00007fff88c14749 +[NSBundle(NSNibLoading) _loadNibFile:nameTable:options:withZone:ownerBundle:] + 727
7 com.apple.AppKit 0x00007fff88c14ca8 +[NSBundle(NSNibLoadingInternal) _loadNibFile:externalNameTable:options:withZone:] + 150
8 com.apple.AppKit 0x00007fff886a2bc0 +[NSBundle(NSNibLoading) loadNibNamed:owner:] + 631
9 com.schrodinger.macpymol 0x000000010084d77b main + 1499
10 com.schrodinger.macpymol 0x0000000100007494 start + 52