Unter Mac OS X und im iOS-Simulator (beide x86) können wir den Debugger (LLDB) mithilfe der Anweisung int3
in Inline-Assemblierung abfangen. Das ist gut, weil es zu einer bestimmten Codezeile führt, aber wir können sofort fortfahren, indem wir im Debugger auf continue klicken.Wie kann ich den Debugger abfangen und auf iOS-Hardware fortsetzen?
Gibt es eine Möglichkeit, dies auf iOS-Hardware zu tun?
An answer to an older question Erwähnungen raise(SIGINT)
die soweit ich sehe (aus Prüfung signal.h
) nicht existiert. Eine andere Antwort erwähnt die Assembleranweisung trap
, die einen Build-Fehler verursacht ("Unknowned instruction mnemonic"). Ebenfalls unerkannt ist die BKPT
Montageanleitung mentioned in ARM documentation.
Ich habe versucht, __builtin_trap()
die fast, fast macht was ich will, aber erlaubt mir nicht weiterzumachen. Ich treffe es, es sei denn, ich fahre den Befehl Zeiger manuell mit jump +1
oder register write pc `$pc+8\`
, die viel weniger bequem ist als nur weiter zu schlagen.
Ich baue für iOS 9 für 32- und 64-Bit-Geräte mit Xcode 7.3.1. Jede Hilfe wird geschätzt!
Downvoter, will erklären? – Luke
Ich denke, er hat Ihre Frage abgelehnt, da sowohl signal() als auch SIGINT Teil von Standard C sind. Http://opensource.apple.com//source/xnu/xnu-1456.1.26/bsd/sys/signal.h – diegog
raise (SIGINT) kann funktionieren, aber nicht immer zuverlässig, irgendwann wird es ein wenig später aufhören, und Sie müssen den Thread-Baum laufen, um zu finden, wo der Breakpoint ist. Ich benutze diese Lösung einmal und dann entfernt.Ich fand später, dass ASSERT aufhören sollte, ohne weiterzugehen, Sie sollten sich ihnen stellen, anstatt sie zu ignorieren, warum wollen Sie dann behaupten? –