iOS 应用程序在使用 XCode 调试器启动时崩溃,在没有调试器的情况下运行良好

Posted

技术标签:

【中文标题】iOS 应用程序在使用 XCode 调试器启动时崩溃,在没有调试器的情况下运行良好【英文标题】:iOS app crash on launch using XCode debugger, runs fine without debugger 【发布时间】:2015-08-30 10:57:00 【问题描述】:

在设备 (iphone) 上运行应用程序时,它会在启动时崩溃而没有任何错误消息。但是,如果设备没有连接到 xcode(不是处于调试模式),只需打开应用程序,它就可以正常运行。

相同的代码在模拟器上运行完美。

以前从未见过,我猜代码签名设置或 LLDB 调试器出了点问题,但我无法解决。

我无法在真实设备上运行进行调试,知道吗?它停在这里:

int main(int argc, char * argv[]) 
    @autoreleasepool 
        // stop here:
        return UIApplicationMain(argc, argv, nil,  NSStringFromClass([AppDelegate class])); 
    

==== 2015/6/19 已编辑 ====

感谢 Jim Ingham 给出清晰的解释。之前,我将 Xcode 设置为捕获所有异常,如下所示:

这在开发时很方便。但是,此断点异常包括 C++ 和 Obj-C 类型。通过排除捕获C++断点,我们可以解决这个问题:

【问题讨论】:

当应用程序“崩溃”时,它可能会在某行代码处停止,并且不会继续前进...尝试单击三角形,因为您想在调试模式下更进一步。 感谢您的回复。我已经为所有异常添加了断点。但它什么也没说。 您是否尝试在调试模式下继续前进?正如您在问题中发布的那样,当应用程序在 autoreleaspool 行之后停止时,请尝试单击三角形继续前进。 我知道,但我需要知道你是否尝试推动三角形......我有一些情况,当我在真实设备上测试时程序在同一点停止(没有断点,如崩溃),但是当我点击继续按钮时工作。 那是 C++ Exception Throw 断点。默认情况下未设置该断点。检查这个项目的断点导航器,看看你是否可能在某个时候设置了它而忘记了这一点。请注意,如果您默认设置“异常断点”,它会为 C++ 和 ObjC 设置它。如果您只对捕获 ObjC 异常感兴趣,只需将其切换到 ObjC。此外,这不是崩溃,只是一个断点,因此您只需点击继续,应用程序就会正常运行。 【参考方案1】:

有时当您使用真实设备进行调试时,新版本的 Xcode 一开始就会停止您的价格,如问题所述:

int main(int argc, char * argv[]) 
    @autoreleasepool 
        // stop here:
        return UIApplicationMain(argc, argv, nil,  NSStringFromClass([AppDelegate class])); 
    

但这不是真正的崩溃(它只是一些安全人员 - 我猜),您需要做的就是单击三角形按钮以在调试模式下走得更远。

是的,我知道没有断点,但无论如何都要这样做。

【讨论】:

谢谢。感谢 Xcode - 那是我生命中的 45 分钟,我永远不会回来!

以上是关于iOS 应用程序在使用 XCode 调试器启动时崩溃,在没有调试器的情况下运行良好的主要内容,如果未能解决你的问题,请参考以下文章

如何使用连接 USB 电缆调试在 Xcode 未启动的移动设备中执行的 iOS 应用程序

iOS 设备 XCODE8 上未发生调试

Xcode 4.3 和 iOS 3.x 设备上的调试

iOS 8:如何正确设置扩展以使用模拟器在 Xcode 中对其进行调试?

今日 iOS 小部件仅在调试时显示

iOS 应用程序在设备上启动后连接调试器时冻结在空白屏幕上