目标C - 如何以编程方式停止执行调试,同时允许继续?

Mer*_*erk 11 breakpoints objective-c assertions continuation

我已经成功地使用目标C中的标准NSAssert(condition_which_should_evaluate_true,@"错误消息")语句,并在断点导航器中添加"所有异常"断点,以编程方式指定条件时,使我的调试版本停止执行.

好又好,但是大多数时候我在调试时,我还希望在那之后继续正常的程序执行.在断言失败后继续执行该程序有助于追踪混淆/错误的来源.至少就我记得在不同平台上编程时的情况而言.

在Objective C开发中是否有标准的方法可以做到这一点?

rob*_*off 14

有一种方法.它不是Objective-C的东西,它是Unix的东西.

kill(getpid(), SIGSTOP);
Run Code Online (Sandbox Code Playgroud)

或者干脆:

raise(SIGSTOP);
Run Code Online (Sandbox Code Playgroud)

这将破坏__kill函数中的调试器.然后,您需要沿着一两帧堆栈来查看调用的帧kill.您可以使用debugger的continue命令继续执行.

请注意,如果您没有在调试器下运行并执行此操作,那么您的应用就会挂起.请参阅技术问答QA1631:检测调试器.您可以使用该信息编写仅SIGSTOP在调试器下运行时发送的包装函数或宏.

此外,Foundation框架提供了一个不同的断言宏,可用于常规函数.是的NSCAssert.