在iPhone上打破调试器

16 iphone debugging assert

对于我的iPhone项目中的断言宏,我正在寻找一种以编程方式进入调试器的方法.在Windows(MSVC++)上,我可以使用__debugbreak()来实现此目的.调用此函数将停止我的程序,启动调试器,并显示调用__debugbreak()的行的调用堆栈.

iPhone的__debugbreak()有什么类似的东西吗?我已经尝试过Debugger(),但这给了我一个链接器错误.

谢谢,克劳斯

nie*_*bot 26

编辑

事实证明这也有效:

#define Debugger() { raise( SIGINT ) ; }

我认为这是相同的原则.


我用这个:

#define Debugger() { kill( getpid(), SIGINT ) ; }

我认为它适用于模拟器和设备..无需组装!


小智 6

Apple开发者论坛上的一个有用的人给了我asm("trap")在设备上asm("int3")运行和在模拟器上运行时使用的提示.如果您在调试模式下启动程序(Option-Command-Y),这会使程序进入调试器.

(__builtin_trap()也会进入调试器,但之后无法继续.assert(false)使用消息终止程序,但不会进入调试器.)


Jen*_*fke 0

我只是在我想停止的地方设置了一个断点。Xcode 会持久记住断点,因此每当我使用 gdb 运行应用程序时,它都会在该点停止。

如果您想在断言失败时中断,设置断点的好地方是 Objective-C 运行时中的函数 objc_exception_throw,它实际上会引发异常。使用“运行”>“显示”>“断点”窗口,双击“双击符号”行,然后键入名称。