2013-12-20 5 views
11

In meinem selbstgewählten Assert-Makro habe ich asm ("trap") auf iOS-Geräten (oder asm ("int3") auf iOS-Simulatoren) verwendet, um einzubrechen der Debugger. Bei 64-Bit-Builds für Geräte erhalte ich jedoch eine "unerkannte Anweisungsmnemonik" für die Trap-Anweisung. Gibt es ein Äquivalent für arm64?asm ("trap") auf 64-bit iOS-Geräten

(Alternativen wie __builtin_trap() oder raise (SIGINT) funktionieren zwar, haben aber ein Verhalten, das ich nicht mag; das erstere lässt Sie nicht über die Pause hinausgehen, und das letztere ist eine Funktion, die Sie haben immer einen Schritt unter, wo Sie im Stapel sein müssen, wenn Sie brechen.)

Antwort

9

Ich war in der Lage, in den Debugger einzubrechen (und weiter danach) mit asm("svc 0");. Ich bin mir nicht sicher, dass dies der richtige Weg ist, aber es scheint, die Arbeit zu tun.

+0

Es ist nicht korrekt. Es ruft unbekannten syscall und das löst [SIGSYS-Signal] (https://en.wikipedia.org/wiki/Unix_signal#SIGSYS) (Bad Systemaufruf) und Debugger fängt es ab. Ich denke, es ist besser [stattdessen SIGSTOP] (https://Stackoverflow.com/a/44142833/468725) zu senden – Pavel