Resumeable Assert / Breakpoint auf iOS wie __debugbreak () mit MS Compiler

8

Ich versuche, ein benutzerdefiniertes Asset-Makro zu implementieren (ähnlich dem, was assert.h hat), aber ich möchte in der Lage sein, die Ausführung fortzusetzen, nachdem ich es erhalten und bestätigt habe.

Eine solche ASSERT -Implementierung könnte beispielsweise lauten:

%Vor%

__debugbreak ist eine intrinsische Funktion in Microsoft-Compilern, die einen Software-Breakpoint, äquivalent zu% co_de, einfügt % in x86. Für iOS gibt es verschiedene Möglichkeiten, diesen __debugbreak zu implementieren:

  • _asm int 3 für x86.
  • __asm__("int "); für regulären Arm.
  • __asm__("bkpt #0"); für arm64
  • __builtin_trap ()
  • __asm__("brk #0");

Aber mit allen von ihnen, wenn ich meine Behauptungen treffe, kann ich nicht einfach übergehen und so weitermachen, wie ich es bei der Arbeit mit Visual Studio tun kann; wenn etwas in meinem iOS-Builds behauptet, es bleibt bei der Assert stecken und ich habe keine andere Wahl als zu beenden, kann ich nicht sogar Anweisung Zeiger manuell verschieben und die Bestätigung überspringen.

Ist es möglich, unter iOS Asserts zu implementieren, die in den Debugger einbrechen und mir trotzdem erlauben, die Ausführung fortzusetzen?

    
Pavel 23.05.2017, 16:52
quelle

1 Antwort

6

Stellt sich heraus, dass ich erreichen kann, was ich will, indem ich einen Syscall mache:

%Vor%

Es gibt einen abschließenden NOP mov x0, x0 aus einem Grund: Wenn Assert bricht, stoppt der Debugger genau in der Assert-Zeile und nicht in einer zufälligen Zeile, in der sich der folgende Befehl befindet.

Falls jemand nach einem Äquivalent von IsDebuggerPresent sucht auf iOS können Sie AmIBeingDebugged verwenden.

    
Pavel 23.05.2017, 18:50
quelle

Tags und Links