Raf*_*ael 4 macos crash-reports hang symbolicatecrash
我的一个应用程序(发布版本)没有响应,所以我不得不强制退出它.
OS X提交了一个Hang报告(没有崩溃报告),我将其复制到*.crash文件中.
我知道我可以使用HockeyApp等服务或atos直接表示崩溃报告,但我如何为OS X应用程序表示Hang报告?
过了一段时间,我发现了如何处理Hang报告,这与正常崩溃报告略有不同.这是我做的:
Show Package Contents.*.appfrom Products和相应*.dSYM文件复制dSYMs到新文件夹中,例如,在桌面上.您将在新文件夹中拥有MyApp.app和MyApp.app.dSYM.文件的命名很重要.ls 通过终端进入新文件夹.现在使用该atos工具('将数字地址转换为二进制图像或进程的符号'),我们需要首先确定应用程序在运行时的加载地址,以及应用程序挂起时堆栈框架的地址.
打开"挂起"报告,找到一条Binary Images:位于该Heaviest stack for ...行下方某处的行.在我的情况下,这看起来类似于:
Binary Images:
**0x107b0f000** - 0x108b59fff com.company.MyApp 1.1.0 (2) <6080DCE1-9086-311C-899F-CC22B32D694D> /Applications/MyApp.app/Contents/MacOS/MyApp
0x7fff89c7e000 - 0x7fff89c87fff libsystem_pthread.dylib (105.10.1) <3103AA7F-3BAE-3673-9649-47FFD7E15C97> /usr/lib/system/libsystem_pthread.dylib
0x7fff8b0bf000 - 0x7fff8bc06fff com.apple.AppKit 6.9 (1344.36) <D94A7D32-A789-37EA-A85C-BEFA7DE716E6> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
0x7fff8bd6e000 - 0x7fff8c09cfff com.apple.Foundation 6.9 (1152.12) <C0EE9DA6-C111-358A-8874-DA175BB797D6> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
Run Code Online (Sandbox Code Playgroud)0x107b0f000**包围的地址是我们的加载地址,您应该复制.
接下来,我们需要找到我们想要查找符号信息的地址,即获取实际的方法签名和代码行,从而导致挂起.因此,请在"最重要的堆栈"下方的"挂起"报告开头的堆栈中查找应用的名称:
Heaviest stack for the main thread of the target process:
10 start + 1 (libdyld.dylib + 13769) [0x7fff91df35c9]
10 NSApplicationMain + 1832 (AppKit + 10612) [0x7fff8b0c1974]
10 -[NSApplication run] + 594 (AppKit + 95459) [0x7fff8b0d64e3]
10 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 194 (AppKit + 145072) [0x7fff8b0e26b0]
10 _DPSNextEvent + 964 (AppKit + 147201) [0x7fff8b0e2f01]
10 _BlockUntilNextEventMatchingListInModeWithFilter + 71 (HIToolbox + 190347) [0x7fff96ae378b]
10 ReceiveNextEventCommon + 431 (HIToolbox + 190794) [0x7fff96ae394a]
10 RunCurrentEventLoopInMode + 235 (HIToolbox + 191439) [0x7fff96ae3bcf]
10 CFRunLoopRunSpecific + 296 (CoreFoundation + 464984) [0x7fff901f1858]
10 __CFRunLoopRun + 927 (CoreFoundation + 466495) [0x7fff901f1e3f]
10 __CFRunLoopDoSources0 + 269 (CoreFoundation + 469005) [0x7fff901f280d]
10 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 (CoreFoundation + 525953) [0x7fff90200681]
10 __NSThreadPerformPerform + 293 (Foundation + 416988) [0x7fff8bdd3cdc]
10 ??? (MyApp + 62967) [0x108b1e5f7]
8 ??? (MyApp + 48600) [0x108b1add8]
8 -[IKImageBrowserView(ImageBrowserLayout) itemFrameAtIndex:] + 63 (ImageKit + 400983) [0x7fff91140e57]
[...]
Run Code Online (Sandbox Code Playgroud)在此示例堆栈跟踪结束时,您会发现MyApp列出两次.复制这两个地址,0x108b1e5f7,0x108b1add8,并关闭该报告.
现在我们准备好了atos.在终端中输入以下内容并按Return键:
atos -o MyApp.app/Contents/MacOS/MyApp -arch x86_64 -l 0x107b0f000 0x108b1e5f7 0x108b1add8
Run Code Online (Sandbox Code Playgroud)atos 将使用同一目录中的*.dSYM文件对addressess进行符号化,并希望输出如下内容:
-[MainWindowController loadDidFinish:] (in MyApp) (MainWindowController.m:127)
-[MainWindowController view:stringForToolTip:point:userData:] (in MyApp) (MainWindowController.m:231)
Run Code Online (Sandbox Code Playgroud)是的,看起来很有前途!如果atos输出相同的地址,而不是代码行,那就出错了.这里错误的主要来源可能是错误的内存地址,所以请确保您选择了正确的内存地址.
如果您有其他问题,请告诉我(@raffael_me).
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |