[LLDB] Créez votre propre commande avec Python

Chargez la commande d'origine créée en Python dans LLDB de Xcode.

Xcode semble lire l'un des deux suivants au démarrage.

Fondamentalement, il semble que .lldbinit-Xcode soit chargé. Cependant, comme ce qui précède est lu à partir de la ligne de commande, etc., si vous décrivez les paramètres de base dans .lldbinit et mettez le processus à lire .lldbinit dans .lldbinit-Xcode comme suit. Ça va.

command source ~/.lldbinit

Lire le fichier de commande d'origine au démarrage

Après avoir défini comme ci-dessus, la commande sera chargée automatiquement en définissant .lldbinit pour lire le fichier Python.

command script import ~/.lldb/hoge.py

Définir dans le fichier

Après avoir défini les paramètres de lecture décrits ci-dessus, définissez le contenu à lire réellement. Le format principal et la description requise sont les suivants.

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."

Après l'avoir défini, lisez-le comme suit.

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

Définir en ligne pendant la pause

Il est facile de vérifier l'opération en le définissant en ligne et en l'exécutant pour un petit test de fonctionnement.

Ce qui suit va démarrer l'interpréteur python.

(lldb) script⏎

Ensuite, définissez comme suit et quittez l'interpréteur.

(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...

Espace réservé de chaîne

Vous pouvez utiliser l'espace réservé en écrivant comme suit. Ceci est pratique lorsque le traitement est effectué en fonction de la chaîne de caractères spécifiée dans la commande.

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")

Commande Split

La commande est passée sous forme de chaîne unique, utilisez donc shlex.split pour la scinder.

command_list = shlex.split(command)

Commande pour copier la vue factice et ʻajouter sous-vue: `

Ce que je voulais faire cette fois était de dupliquer une vue en utilisant la taille de vue spécifiée et de créer une commande pour la rendre ʻaddSubview: `et vérifier si la vue est correctement générée à la position souhaitée. ..

Je pense que c'est un peu redondant, mais pour le moment, cela a fonctionné si je faisais ce qui suit, alors je vais le décrire.

#!/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."

Comment utiliser

(lldb) dmy self.hogeView self.view

Un UIView est créé en utilisant le cadre de self.hogeView, et il est ajouté à self.view avec ʻaddSubview:`.

Recommended Posts

[LLDB] Créez votre propre commande avec Python
Créez vos propres commandes Linux en Python
Créez votre propre Big Data en Python pour validation
Créez votre propre stéréogramme aléatoire (RDS) en Python.
[Python] journalisation dans votre propre module
Utilisez facilement vos propres fonctions en Python
Obtenez votre propre adresse IP en Python
Créez votre propre classe de structure graphique et son dessin avec python
Créez votre propre exception
Créer Spatia Lite en Python
Importez vos propres modules avec le développement Python de Grasshopper
Mémo pour créer votre propre Box avec le Python de Pepper
Créer une fonction en Python
Créer un dictionnaire en Python
Essayez d'améliorer votre propre quiz d'introduction avec Python
Exécuter des commandes externes avec python
[Blender x Python] Créez votre propre fonction et résumé jusqu'à présent
Utilisez CASA Toolkit dans votre propre environnement Python
Créez votre premier fichier GDSII en Python en utilisant gdspy
Créez votre propre middleware Django
[Road to Intermediate Python] Définissez dans votre propre classe
Exécution de commandes externes en Python
Essayez de trier vos propres objets avec des files d'attente prioritaires en Python
[Python] Créez votre propre bot LINE
Appuyez sur une commande en Python (Windows)
Créer un conteneur DI avec Python
Exécutez la commande shell / Python dans R
Dans la commande python, python pointe vers python3.8
Créer un fichier binaire en Python
Créez Gmail en Python sans utiliser l'API
Créez votre propre service de résolution de noms
[Django] Créez votre propre page d'erreur 403, 404, 500
Créer une documentation de projet Python dans Sphinx
Créer une chaîne aléatoire en Python
Créer et lire des paquets de messages en Python
Essayez docker: créez votre propre image de conteneur pour une application Web Python
Créez wordcloud à partir de votre tweet avec python3
Apprenez le modèle de conception "Commande" en Python
Créez votre propre serveur DNS avec Twisted
Créez un environnement python sur votre Mac
[Python] Empaquetez et distribuez vos propres modules
Créer une application GUI simple en Python
Créez votre propre valeur composite avec SQLAlchemy
Créer des pièces de concepteur Qt avec Python (PyQt)
[Python] Enregistrez votre propre bibliothèque dans PyPI
Jusqu'à ce que vous installiez votre propre bibliothèque Python
Décomposer les arguments de commande en une seule ligne en Python
[GPS] Créer un fichier kml avec Python
Publiez votre propre bibliothèque Python sur Homebrew
Essayez de fouiller votre journal avec Python
Créez des raccourcis pour exécuter des fichiers Python sur le terminal avec VScode
Créez vous-même le tracé familier du flux de rayons X sur 3 jours de NOAA / GOES avec Python
Créez votre propre caméra virtuelle avec Python + OpenCV et appliquez des effets originaux
Modèle pour créer des applications de ligne de commande en Python
Quadtree en Python --2
Python en optimisation