相关疑难解决方法(0)

在iPhone上打破调试器

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

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

谢谢,克劳斯

iphone debugging assert

16
推荐指数
3
解决办法
6651
查看次数

iOS上的可恢复断言/断点,如带有MS编译器的__debugbreak()

我正在尝试实现自定义资产宏(类似于assert.h所具有的),但我希望能够在获得并断言之后继续执行.

例如,一个这样的ASSERT实现可以是:

#define ASSERT(expr) ((void)( (!!(expr)) || (__debugbreak(), 0)))
Run Code Online (Sandbox Code Playgroud)

__debugbreak是Microsoft编译器中的一个内部函数,它插入了软件断点,相当于_asm int 3x86.对于iOS,有不同的方法来实现__debugbreak:

  • __asm__("int $3"); 对于x86.
  • __asm__("bkpt #0"); 对于常规手臂.
  • __asm__("brk #0"); for arm64
  • __builtin_trap()
  • raise(SIGTRAP)

但是当我的断言命中时,所有这些都不能简单地跨过并继续我在使用visual studio时可以做的事情; 当我的iOS构建中的某些东西断言它在断言时卡住了,我别无选择,只能终止,我甚至无法手动移动指令指针并跳过断言.

是否有可能在iOS上实现断言进入调试器并仍允许我继续执行的断言?

c c++ debugging assert ios

10
推荐指数
1
解决办法
490
查看次数

标签 统计

assert ×2

debugging ×2

c ×1

c++ ×1

ios ×1

iphone ×1