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 应用程序