3 回答
TA贡献1770条经验 获得超3个赞
“ EXC_BREAKPOINT(SIGTRAP)”异常是否由调试断点引起?
否。实际上,反过来:SIGTRAP(跟踪陷阱)将导致调试器中断(中断)您的程序,就像实际断点一样。但这是因为调试器总是在崩溃时中断,而SIGTRAP(就像其他几个信号一样)是崩溃的一种类型。
SIGTRAP通常是由引发NSExceptions引起的,但并非总是如此-甚至有可能直接自己引发。
现在,我注意到我忘记删除一些调试断点,包括_NSLockError,[NSException提高]和objc_exception_throw。
这些不是断点。其中两个是函数,-[NSException raise]是一种方法。
您是说要在这些函数和方法上设置断点吗?
我假设使用“发布”配置可防止设置任何断点-
没有。
这些配置是构建配置。它们影响Xcode构建应用程序的方式。
断点不是构建的一部分;您在调试器中设置它们。它们仅存在,只会被命中,并且只有在调试器下运行程序时才停止程序。
由于它们不是构建的一部分,因此不可能仅通过向他们提供应用程序捆绑包就将断点传递给用户。
我不确定断点是如何工作的……
当您的程序到达断点时,调试器将中断(中断)您的程序,随后您可以检查程序的状态并仔细向前查看程序如何出错。
由于是调试器停止程序,因此当您不在调试器下运行程序时,断点不起作用。
…或者是否需要从gdb内部运行程序才能使断点生效。
是的 调试器断点仅在调试器中起作用。
我的问题是:我离开断点集后会导致用户观察到崩溃的原因吗?
没有。
首先,如前所述,即使这些断点确实以某种方式传递到用户的系统中,断点也仅在调试器中有效。如果您的程序不在调试器下运行,则调试器无法在断点处停止。用户几乎可以肯定不在调试器下运行您的应用程序,尤其是因为他们从崩溃日志中注销了该应用程序。
即使他们与所有这些断点设置的调试器下运行你的应用程序,当你的程序到这一点,这些断点所以人们只能火灾,如果你或可可称为断点只打了_NSLockError,-[NSException raise]或objc_exception_throw。达到这一点并不是问题的原因,而是问题的征兆。
而且,如果由于其中之一被调用而导致崩溃,那么崩溃日志中将至少有其中一个被命名。没有。
因此,这与您的断点无关(不涉及其他机器,调试器),也不是Cocoa异常-正如我提到的那样,Cocoa异常是SIGTRAP的原因之一,但不是唯一的原因。您遇到了另一个。
如果不是,还有其他人对[NSFont fontWithName:size:]有类似的问题吗?
因为您切断了崩溃日志,所以我们无法说出我们遇到的任何问题是否相似。我们对于崩溃发生的背景一无所知。
唯一值得删除的是“二进制映像”部分,因为我们没有您的dSYM软件包,这意味着我们无法使用该部分来表示崩溃日志。
另一方面,您可以。我为此目的编写了一个应用程序;将崩溃日志提供给它,并且它应该自动检测dSYM软件包(您为分发的每个Release版本保留dSYM软件包,对吗?),然后将函数和方法名恢复到堆栈跟踪中,无论函数和方法出现在何处。
TA贡献1804条经验 获得超7个赞
此用户极有可能安装了损坏的字体。堆栈跟踪绝对支持该假设,事实上它仅影响一个用户。
在这种情况下,除了让用户删除有问题的字体外,您无能为力,因为崩溃发生在Apple代码的深处。
尝试让用户在“字体书”中运行字体验证。为此,请启动“字体书”,在源列表中单击“ 所有字体 ”,然后选择所有列出的字体。然后,您可以从“ 文件”菜单中选择“ 验证字体 ” 。
- 3 回答
- 0 关注
- 4099 浏览
添加回答
举报