Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在我自己开发的断言宏中,我一直在 iOS 设备上使用 asm("trap")(或在 iOS 模拟器上使用 asm("int3"))来中断调试器。但是,在设备的 64 位版本中,我得到了陷阱指令的“无法识别的指令助记符”。arm64是否有等价物?
(像 __builtin_trap() 或 raise(SIGINT) 这样的替代方案确实有效,但有一些我不喜欢的行为;前者不会让你继续休息,而后者是一个函数,所以你总是比你低一级中断时需要在堆栈中的位置。)
我能够使用asm("svc 0");. 我不确定这是正确的方法,但它似乎可以完成这项工作。
asm("svc 0");
没有尝试过 iOS,但在 Linux 上,该brk指令会SIGTRAP引发,如果一个正在运行,它会捕获到调试器。
brk
SIGTRAP
asm("brk #0");