在介绍Openstack的代码调试之前,先熟悉下在Python中是如何进行代码调试的。
pdb
说到Python的代码调试,难道是满屏幕的print
?肯定不是这样的,Python作为一种非常强大的语言,肯定不会让你的调试之路充满print
,接下来就介绍下Python中进行代码调试的pdb工具。
pdb 是 python 自带的一个包,为 python程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。
直接上代码:12345#!/usr/bin/env python# coding=utf-8if __name__ == '__main__': import pdb; pdb.set_trace()
执行代码时,会出现一个友好的交互界面,然后就可以愉快的print
了。
pudb
pudb
跟pdb
相比,就显得比较高大上了,pudb
提供了图形化界面,而且是彩色的,但是使用之前需要安装pudb
库,安装方式如下:1pip install pudb
pudb
提供了图形化界面, 同样的它也可以设置断点,而且侧边栏会显示调用栈和变量(尤其是变量),他的命令和pdb
完全一样。
直接上图:
pudb
的交互效果明显比pdb
更好,而且可以很想象的将调试过程图像化,调试起来更加高效和方便。
常用命令
命令 | 解释 |
---|---|
break 或 b | 设置断点 |
continue 或 c | 继续执行程序 |
list 或 l | 查看当前行的代码段 |
step 或 s | 进入函数 |
return 或 r | 执行代码直到从当前函数返回 |
exit 或 q | 中止并退出 |
next 或 n | 执行下一行 |
pp 或 p | 打印变量的值 |
help | 帮助 |
Openstack代码调试
首先需要找到需要调试代码的位置,下面通过一个虚拟机创建的例子来说明。
- 首先找到代码的位置;
Openstack
的代码一般在/usr/lib/python2.7/site-packages/
目录下; - 在代码的入口处添加断点,
import pdb; pdb.set_trace()
; - 一般
Openstack
的服务都是有systemd
管理,所以需要使用systemctl
停掉对应的服务; - 重新启动对应的服务,此时不能够再使用
systemctl
的方式去启动,需要直接使用运行源码的方式去运行,比如nova-compute
服务,使用/usr/bin/nova-compute
进行启动。
接下来就可以进行调试了。