gpt4 book ai didi

ios - NSAssert 在调试器中工作,但当直接在设备上运行时,控制台中缺少消息

转载 作者:行者123 更新时间:2023-11-28 20:16:03 26 4
gpt4 key购买 nike

运行调试器时,NSAssert 在 Xcode 4(最高 4.6)中运行良好。断言触发,您对其断点,然后它输出断言消息。

但是当在调试器之外运行时(在设备上调试构建),断言会触发 - 但没有任何消息。

这使得断言变得毫无用处:您可以看到断言的行号,但是来自程序员的详细消息已被删除。

这是 Xcode 问题吗? clang/LLVM 问题?这是一个错误值的设置吗?或者有解决方法吗?


示例代码:

NSAssert(FALSE, @"X was invalid: %i", x );

示例输出(控制台):

<Warning>: *** Assertion failure in -[myClass method:], myClass.m:124
<Notice>: Formulating crash report for process MyApp[82]

预期输出(控制台):

<Warning>: *** Assertion failure in -[myClass method:], myClass.m:124
<Warning>: *** "X was invalid: -435"
<Notice>: Formulating crash report for process MyApp[82]

注意:我只是在猜测 Apple 将如何格式化断言消息。


更新:发现问题。我的原始描述有误:

在调试器中运行时,消息没有输出到控制台

最佳答案

两个观察:

  1. NSAssert 仅用于调试目的。当您构建应用的发布版本时,NSAssert 不执行任何操作。

  2. 当您在设备上运行的应用程序的调试构建中使用 NSAssert 时(不是通过调试器),消息位于设备的控制台中,而不是 Xcode 的控制台中。如果您转到 Xcode 中的“管理器”,选择“设备”,选择您的设备并查看“控制台”,您会在那里看到您的断言。

例如,我在“断言测试”应用程序中放入了一行代码:

NSAssert(FALSE, @"Assertion performed here");

当我通过 Xcode 的管理器查看设备的“控制台”时,我看到:

Aug  6 09:10:53 Rob-iPod amfid[200] : Aug  6 09:10:53  SecTrustEvaluate  [leaf CriticalExtensions IssuerCommonName]Aug  6 09:10:53 Rob-iPod Assertion Test[199] : *** Assertion failure in -[ViewController viewDidLoad], /Users/rryan/Documents/Development/Xcode/Assertion Test/Assertion Test/ViewController.m:21Aug  6 09:10:53 Rob-iPod kernel[0] : launchd[199] Builtin profile: container (sandbox)Aug  6 09:10:53 Rob-iPod kernel[0] : launchd[199] Container: /private/var/mobile/Applications/7A7A62EF-8CEC-4388-932D-5C02DE77B841 (sandbox)Aug  6 09:10:53 Rob-iPod Assertion Test[199] : *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Assertion performed here'    *** First throw call stack:    (0x315592a3 0x391d797f 0x3155915d 0x31e2eab7 0x843f7 0x33380595 0x333c0d79 0x333bcaed 0x333fe1e9 0x333c183f 0x333b984b 0x33361c39 0x333616cd 0x3336111b 0x350535a3 0x350531d3 0x3152e173 0x3152e117 0x3152cf99 0x3149febd 0x3149fd49 0x333b8485 0x333b5301 0x84149 0x3960eb20)Aug  6 09:10:54 Rob-iPod ReportCrash[201] : Formulating crash report for process Assertion Test[199]Aug  6 09:10:54 Rob-iPod com.apple.launchd[1] (UIKitApplication:com.robertmryan.Assertion-Test[0x7be0][199]) : (UIKitApplication:com.robertmryan.Assertion-Test[0x7be0]) Job appears to have crashed: Abort trap: 6Aug  6 09:10:54 Rob-iPod backboardd[26] : Application 'UIKitApplication:com.robertmryan.Assertion-Test[0x7be0]' exited abnormally with signal 6: Abort trap: 6Aug  6 09:10:54 Rob-iPod ReportCrash[201] : libMobileGestalt copySystemVersionDictionaryValue: Could not lookup ReleaseType from system version dictionaryAug  6 09:10:54 Rob-iPod ReportCrash[201] : Saved crashreport to /var/mobile/Library/Logs/CrashReporter/Assertion Test_2013-08-06-091053_Rob-iPod.plist using uid: 0 gid: 0, synthetic_euid: 501 egid: 0

如果您查看第五行,您会在那里看到断言消息。

关于ios - NSAssert 在调试器中工作,但当直接在设备上运行时,控制台中缺少消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18080742/

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