[LLDB] Erstellen Sie Ihren eigenen Befehl mit Python

Laden Sie den ursprünglich in Python erstellten Befehl in die LLDB von Xcode.

Xcode scheint beim Start eine der folgenden beiden zu lesen.

Grundsätzlich scheint ".lldbinit-Xcode" geladen zu sein. Da das Obige jedoch über die Befehlszeile usw. gelesen wird, beschreiben Sie die Grundeinstellungen in ".lldbinit" und setzen den Prozess wie folgt in ".lldbinit-Xcode" auf ".lldbinit". Es ist in Ordnung.

command source ~/.lldbinit

Lesen Sie beim Start die ursprüngliche Befehlsdatei

Nach der Einstellung wie oben wird der Befehl automatisch geladen, indem ".lldbinit" zum Lesen der Python-Datei festgelegt wird.

command script import ~/.lldb/hoge.py

In Datei definieren

Definieren Sie nach dem Festlegen der oben beschriebenen Leseeinstellungen den Inhalt, der tatsächlich gelesen werden soll. Das Hauptformat und die erforderliche Beschreibung lauten wie folgt.

new-command.py


#!/usr/bin/env python
#coding: utf-8

import lldb
import commands
import os

def command_function(debugger, command, result, internal_dict):
	cmd = "po self"
	debugger.HandleCommand(cmd)
	
def __lldb_init_module(debugger, internal_dict):
	debugger.HandleCommand("command script add -f new-command:command_function commandname")
	print "commandname has been installed."

Lesen Sie es nach dem Definieren wie folgt.

(lldb) command script import /path/to/command.py

Inline während der Pause einstellen

Es ist einfach, den Vorgang zu überprüfen, indem Sie ihn inline einstellen und für einen kleinen Betriebstest ausführen.

Im Folgenden wird der Python-Interpreter gestartet.

(lldb) script⏎

Definieren Sie dann wie folgt und beenden Sie den Interpreter.

(lldb) script⏎
Python Interactive Interpreter. To exit, type 'quit()', 'exit()' or Ctrl-D.
>>> def hoge_function(debugger, command, result, internal_dict):
...	cmd = "po self"
...	debugger.HandleCommand(cmd)
...	
>>> quit⏎
(lldb) command script add hoge -f hoge_func
(lldb) hoge
<UIView...

String Platzhalter

Sie können den Platzhalter wie folgt verwenden. Dies ist praktisch, wenn die Verarbeitung basierend auf der im Befehl angegebenen Zeichenfolge ausgeführt wird.

val = "This is %s %s" % ("a", "pen")

# --- or ---

val = "This is %(unit)s %(msg)s" % {"unit": "a", "msg": "pen"}

# --- or ---

val = """This is
%s %s""" % ("a", "pen")

Befehl teilen

Der Befehl wird als einzelne Zeichenfolge übergeben. Verwenden Sie daher shlex.split, um ihn zu teilen.

command_list = shlex.split(command)

Befehl zum Kopieren einer Dummy-Ansicht und addSubview:

Dieses Mal wollte ich einen Befehl erstellen, der die Ansicht mit der angegebenen Ansichtsgröße dupliziert, und dann "addSubview:", um festzustellen, ob die Ansicht am gewünschten Speicherort ordnungsgemäß generiert wurde. ..

Ich denke, es ist ein bisschen überflüssig, aber vorerst hat es funktioniert, wenn ich Folgendes getan habe, also werde ich es beschreiben.

#!/usr/bin/env python
# -*- coding: utf-8

import lldb
import commands
import os
import shlex

def dmy_func(debugger, command, result, internal_dict):
    commands = shlex.split(command)

    count = len(commands)

    if count < 2:
        return

    cmd = "po CGRect $frame = (CGRect)[%s frame]" % commands[0]
    print(cmd)
    debugger.HandleCommand(cmd)

    cmd = "po UIView *$view = [[UIView alloc] initWithFrame:(CGRect)$frame]"
    print(cmd)
    debugger.HandleCommand(cmd)

    cmd = "po [$view setBackgroundColor:(UIColor*)[UIColor redColor]]"
    print(cmd)
    debugger.HandleCommand(cmd)

    cmd = "po [%s addSubview:(UIView*)$view]" % commands[1]
    print(cmd)
    debugger.HandleCommand(cmd)

def __lldb_init_module(debugger, internal_dict):
    debugger.HandleCommand("command script add -f dmy.dmy_func dmy")
    print "dmy command has been installed."

Wie benutzt man

(lldb) dmy self.hogeView self.view

Ein UIView wird unter Verwendung des Rahmens von "self.hogeView" erstellt und "addSubview:" zu "self.view" hinzugefügt.

Recommended Posts

[LLDB] Erstellen Sie Ihren eigenen Befehl mit Python
Erstellen Sie Ihre eigenen Linux-Befehle in Python
Erstellen Sie Ihre eigenen Big Data in Python zur Validierung
Erstellen Sie Ihr eigenes Random Dot Stereogram (RDS) in Python.
[Python] Anmelden Ihres eigenen Moduls
Verwenden Sie einfach Ihre eigenen Funktionen in Python
Holen Sie sich Ihre eigene IP-Adresse in Python
Erstellen Sie Ihre eigene Diagrammstrukturklasse und deren Zeichnung mit Python
Erstellen Sie Ihre eigene Ausnahme
Erstellen Sie Spatia Lite in Python
Importieren Sie Ihre eigenen Module mit der Python-Entwicklung von Grasshopper
Memo zum Erstellen einer eigenen Box mit Peppers Python
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Versuchen Sie, Ihr eigenes Intro-Quiz mit Python zu verbessern
Führen Sie externe Befehle mit Python aus
[Blender x Python] Erstellen Sie Ihre eigene Funktion und Zusammenfassung
Verwenden Sie CASA Toolkit in Ihrer eigenen Python-Umgebung
Erstellen Sie Ihre erste GDSII-Datei in Python mit gdspy
Erstellen Sie Ihre eigene Django-Middleware
[Road to Intermediate Python] Definieren Sie in Ihrer eigenen Klasse
Externe Befehlsausführung in Python
Versuchen Sie, Ihre eigenen Objekte mit Prioritätswarteschlangen in Python zu sortieren
[Python] Erstelle deinen eigenen LINE-Bot
Drücken Sie einen Befehl in Python (Windows)
Erstellen Sie einen DI-Container mit Python
Führen Sie den Shell-Befehl / Python in R aus
Im Python-Befehl zeigt Python auf Python3.8
Erstellen Sie eine Binärdatei in Python
Erstellen Sie Google Mail in Python ohne Verwendung der API
Erstellen Sie Ihren eigenen Namensauflösungsdienst
[Django] Erstellen Sie Ihre eigene 403, 404, 500-Fehlerseite
Erstellen Sie eine Python-Projektdokumentation in Sphinx
Erstellen Sie eine zufällige Zeichenfolge in Python
Erstellen und lesen Sie Messagepacks in Python
Docker ausprobieren: Erstellen Sie Ihr eigenes Container-Image für eine Python-Web-App
Erstellen Sie mit python3 eine Wortwolke aus Ihrem Tweet
Lernen Sie das Entwurfsmuster "Befehl" in Python
Erstellen Sie mit Twisted Ihren eigenen DNS-Server
Erstellen Sie eine Python-Umgebung auf Ihrem Mac
[Python] Packen und verteilen Sie Ihre eigenen Module
Erstellen Sie eine einfache GUI-App in Python
Erstellen Sie mit SQLAlchemy Ihren eigenen zusammengesetzten Wert
Erstellen Sie Qt-Designerteile mit Python (PyQt)
[Python] Registrieren Sie Ihre eigene Bibliothek in PyPI
Bis Sie Ihre eigene Python-Bibliothek installieren
Zerlegen Sie Befehlsargumente in einer Zeile in Python
[GPS] Erstellen Sie eine kml-Datei mit Python
Veröffentlichen Sie Ihre eigene Python-Bibliothek auf Homebrew
Versuchen Sie, Ihr Tagebuch mit Python zu durchsuchen
Erstellen Sie Verknüpfungen, um Python-Dateien auf dem Terminal mit VScode auszuführen
Erstellen Sie mit Python selbst die bekannte 3-Tage-Darstellung des Röntgenflusses von NOAA / GOES
Erstellen Sie mit Python + OpenCV Ihre eigene virtuelle Kamera und wenden Sie Originaleffekte an
Vorlage zum Erstellen von Befehlszeilenanwendungen in Python
Quadtree in Python --2
Python in der Optimierung