Se requieren conocimientos básicos antes de leer este artículo:
use Python para extender gdb
python para dibujar Graphviz
Utilice GDB para dibujar árboles rojo-negro
La extensión Python de gdb se introdujo en las secciones anteriores. Consulte Extender gdb con python.
Y Python tiene el módulo Graphviz, por lo que puedes usar gdb para llamar a Python y usar Graphviz para dibujar en Python.
Ideas
Establezca un punto de interrupción de GDB donde se inserta el árbol rojo-negro, defina el comando en el punto de interrupción y pase el puntero del árbol rojo-negro a Python como parámetro.
Analizar parámetros en Python, construir sintaxis de puntos y mostrar
ejemplo de código
.gdbinit
documento
layout src
source script/algc-test-rbtree-gdb.py
b 15
b 24
b 34
b 43
commands 1
print-rbt *tree->root
end
commands 2
print-rbt *tree->root
end
commands 3
print-rbt *tree->root
end
commands 4
print-rbt *tree->root
end
archivo Python
import gdb
import os
class PrintRBT(gdb.Command):
def __init__(self):
super().__init__("print-rbt", gdb.COMMAND_USER)
def invoke(self, arg, from_tty):
root = gdb.parse_and_eval(arg)
......
......
os.system("dot -Tsvg ./rbt.dot > ./rbt.svg")
os.system("dot -Tpng ./rbt.dot > ./rbt.png")
os.system("xdg-open ./rbt.svg")
PrintRBT()
Mostrar resultados