用python扩展gdb,把断点触发时收集的信息输出到几个json文件里,这样在jupyter notebook或者其他需要的环境中,把数据表达出来。
比《MySQL代码学习第三——用python扩展gdb》中加了一些代码。
#!/usr/bin/python
mysql的客户端要在screen中打开,此screen启动的时候,要命名为mysql。
screen -S mysql
目前上面python代码中调用了screen -S mysql -X hardcopy -h 文件名,这是拷贝名称为mysql的screen屏幕到指定文件。之前用的是screen的日志,但是日志中会有控制字符(上下左右键等)。找了半天发现可以用screen的hardcopy。
目的是把当前mysql客户端的输入输出记录下来,能和断点信息相对应。将来在展示的界面展示出来可以参考。
目前一般的跟踪顺序如下:
- 打开gdb,比如 gdb /usr/local/mysql80/bin/mysqld
- 设置一个在启动以后容易触发,但又不会触发很多次的断点,比如do_command
- 在gdb中让mysqld运行起来,比如 r --defaults-file=/data/mysql8015/my.cnf
- 在screen中开的mysql中进行操作(比如登录)
- 断点触发了以后,开始设置真正想跟踪的断点,并执行一次python脚本,比如 source /data/source/bt_graph_data.py
- 用命令c继续执行
- 然后在mysql客户端可以进行各种操作,断点收集的信息写在了几个文件里
- 利用python脚本输出的几个文件,就可以进行后续的展示和分析了
先是把node.data和edge.data导入了gephi看一下,发现太复杂了,很难看得清楚。
因此转向jupyter notebook,使用pyecharts,边画边改代码。目前的方法是让扩展gdb的代码输出两个json文件,同时从screen中抓取的mysql客户端输入输出信息,也保存为json文件。在jupyter notebook中读取这几个json,并把数据切分成多份,让每个图相对简单一些。同时,mysql客户端的输入输出信息与对应的断点信息输出在同一个图上,以作参考,在一些比较关注客户端操作的场景可能会特别有用。