我会导致 Xcode 的调试器以编程方式中断吗?



如果我的iOS程序在调试器中运行,我正在寻找一种方法,使XCode调试器以编程方式从Swift代码中断。这与System.Diagnostics.Degger.Break()在VisualStudio环境中的工作方式类似。这可能吗?关键是,任何开发人员只要点击特定的代码部分就可以中断,但不要出现导致代码执行永久停止的致命错误。

编辑:这与用户要求"启用"断点有点不同(尽管该问题中提供的答案正是我想要的)。我仍然在寻找一些可以在Swift中完成的事情,而不需要互操作、桥接头等等。

对于Swift,raise(SIGINT)适用于我。

我有这个功能:

func fail(desc: String) {
  #if DEBUG
    print("assertFail:(desc)")
    raise(SIGINT)
  #endif
}

关于DEBUG宏设置,请参阅此处:在没有预处理器宏的情况下,是否有一种方法可以在Xcode项目的项目级别定义实用的方案特定标志

如果通过xcode进行调试,那么在代码中放入asm("svc 0")将停止运行的应用程序。请参阅:https://stackoverflow.com/a/34078247/215400

我不是100%肯定没有内置的,但你可以在XCode UI中使用符号断点来创建你想要的东西。

1) 创建一个新类来表示调试器中断。

@interface MYDebuggerBreak : NSObject
+(void)fireUpDebugger;
@end

@implementation MyDebuggerBreak
+(void)fireUpDebugger {
    // Do Nothing
}
@end

2) 将符号断点添加到该类上的方法

[MYDebuggerBreak fireUpDebugger]

这有点迂回,您也可以直接在"fireUpDebugger"行中放置断点,因为您可以控制代码。如果您想停止对无法控制的对象的方法调用,符号断点会更有用。

最新更新