阅读本文前需要的基础知识
用 python 扩展 gdb
python 绘制 graphviz
使用 GDB 画红黑树
前面几节中介绍了 gdb 的 python 扩展,参考 用 python 扩展 gdb
并且 python 有 graphviz 模块,那么可以用 gdb 调用 python,在 python 中使用 graphviz 绘图。
思路
在红黑树插入的地方打 GDB 断点,在断点处定义 command 命令,并将红黑树的指针作为参数传递给 python。
在 python 中解析参数,并构造 dot 语法,并显示
代码示例
.gdbinit
文件
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
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()
效果展示