gpt4 book ai didi

macos - 如何符号化 OS X 应用程序的挂起报告?

转载 作者:行者123 更新时间:2023-12-04 23:00:19 25 4
gpt4 key购买 nike

我的一个应用程序(发行版)没有响应,所以我不得不强制退出它。

OS X 提出了 挂报告 (没有崩溃报告),我将其复制到 *.crash 文件中。

我知道我可以使用 HockeyApp 或 atos 等服务直接象征崩溃报告,但我怎样才能象征 OS X 应用程序的挂起报告?

最佳答案

一段时间后,我发现了如何处理 Hang 报告,这与正常的崩溃报告略有不同。这是我所做的:

  • 在 Xcode 中查找在 Organizer 中崩溃的应用程序的相应存档并在 Finder 中显示它(右键单击)。
  • 右键单击存档并选择 Show Package Contents .
  • 复制*.app来自 Products和相应的*.dSYM来自 dSYMs 的文件目录到一个新文件夹中,例如,在您的桌面上。您将在新文件夹中拥有一个 MyApp.app 和一个 MyApp.app.dSYM。文件的命名很重要。
  • ls通过终端进入新文件夹。

  • 现在使用 atos工具('将数字地址转换为二进制图像或进程的符号'),我们需要首先确定您的应用程序在运行时的加载地址,以及应用程序挂起时堆栈帧的地址。
  • 打开 Hang 报告,找到一条写着 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

  • 地址 0x107b0f000 ** 包围的是我们的加载地址,你应该复制它。
  • 接下来,我们需要找到我们想要为其查找符号信息的地址,即获取实际的方法签名和导致挂起的代码行。因此,请在 Hang 报告开头的“Heaviest stack”下方的堆栈中查找您的应用程序名称:
    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]
    [...]

  • 在此示例堆栈跟踪的末尾,您会发现 MyApp 列出了两次。复制两个地址, 0x108b1e5f7 , 0x108b1add8 ,然后关闭报告。
  • 现在我们可以使用 atos .在终端中输入以下内容并按回车:
    atos -o MyApp.app/Contents/MacOS/MyApp -arch x86_64 -l 0x107b0f000 0x108b1e5f7  0x108b1add8
  • atos将使用同一目录中的 *.dSYM 文件对地址进行符号化,并希望输出如下内容:
    -[MainWindowController loadDidFinish:] (in MyApp) (MainWindowController.m:127)
    -[MainWindowController view:stringForToolTip:point:userData:] (in MyApp) (MainWindowController.m:231)

  • 是的,这看起来很有希望!
    如果 atos输出与您放置的地址相同的地址,而不是代码行,但出了点问题。此处错误的主要来源可能是错误的内存地址,因此请确保您选择了正确的地址。

    如果您还有其他问题,请告诉我 (@raffael_me)。

    关于macos - 如何符号化 OS X 应用程序的挂起报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27482638/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com