有一系列StackOverflow问题在svc #128
指令后意外地提到了调试器。在我自己处理这个问题时,我想问一些关于何时以及为什么会出现此问题的一般性问题。
svc #128
是什么?答案 0 :(得分:1)
svc #128
或svc 0x80
调用是ARM指令集(ARM Documentation)中的Supervisor Call
。您需要查看寄存器值以指示被调用的内容。
示例汇编程序:
libsystem_kernel.dylib`__pthread_kill:
0x195557268: movz x16, #328 // NOTE THIS VALUE
0x19555726c: svc #128
0x195557270: b.cc 0x195557288 ; __pthread_kill + 32
...
在此Kernel System Calls表中查找movz
值(本例中为#328
)。对于#328
,这对应于pthread_kill
,它与上面列出的方法的名称相匹配。当调用中断时,它将在svc
之后立即落在指令上,在本例中为b.cc
指令。
请注意,LLDB也会中断某些线程到线程信号,例如: SIGUSR2,即使它是有意和正确的。您可以将Xcode配置为忽略此状态并继续执行而不会出现问题:
Permanently configuring LLDB (in Xcode 4.3.2) not to stop on signals
感谢Notlikethat的输入