Openstack如何进行代码调试

在介绍Openstack的代码调试之前,先熟悉下在Python中是如何进行代码调试的。

pdb

说到Python的代码调试,难道是满屏幕的print?肯定不是这样的,Python作为一种非常强大的语言,肯定不会让你的调试之路充满print,接下来就介绍下Python中进行代码调试的pdb工具。

pdb 是 python 自带的一个包,为 python程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。

直接上代码:

1
2
3
4
5
#!/usr/bin/env python
# coding=utf-8
if __name__ == '__main__':
import pdb; pdb.set_trace()

执行代码时,会出现一个友好的交互界面,然后就可以愉快的print了。

pudb

pudbpdb相比,就显得比较高大上了,pudb提供了图形化界面,而且是彩色的,但是使用之前需要安装pudb库,安装方式如下:

1
pip install pudb

pudb提供了图形化界面, 同样的它也可以设置断点,而且侧边栏会显示调用栈和变量(尤其是变量),他的命令和pdb完全一样。

直接上图:pudb

pudb的交互效果明显比pdb更好,而且可以很想象的将调试过程图像化,调试起来更加高效和方便。

常用命令

命令 解释
break 或 b 设置断点
continue 或 c 继续执行程序
list 或 l 查看当前行的代码段
step 或 s 进入函数
return 或 r 执行代码直到从当前函数返回
exit 或 q 中止并退出
next 或 n 执行下一行
pp 或 p 打印变量的值
help 帮助

Openstack代码调试

首先需要找到需要调试代码的位置,下面通过一个虚拟机创建的例子来说明。

  1. 首先找到代码的位置;Openstack的代码一般在/usr/lib/python2.7/site-packages/目录下;
  2. 在代码的入口处添加断点,import pdb; pdb.set_trace()
  3. 一般Openstack的服务都是有systemd管理,所以需要使用systemctl停掉对应的服务;
  4. 重新启动对应的服务,此时不能够再使用systemctl的方式去启动,需要直接使用运行源码的方式去运行,比如nova-compute服务,使用/usr/bin/nova-compute进行启动。

接下来就可以进行调试了。

推荐文章