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
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
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
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...
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")
Der Befehl wird als einzelne Zeichenfolge übergeben. Verwenden Sie daher shlex.split
, um ihn zu teilen.
command_list = shlex.split(command)
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."
(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