1

调试python程序

 2 years ago
source link: https://www.hi-roy.com/posts/%E8%B0%83%E8%AF%95python%E7%A8%8B%E5%BA%8F/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

调试python程序

2014-04-10

怪不得这几天头疼的厉害,原来是发生了2件大事:官方的XP彻底和我们告别了and爆发了OpenSSL HeartBleed漏洞。这个漏洞可以说是一场大地震,不知道又会有多少网站被“扒光脱裤”,过一阵又得改密码玩了。面对这种网络安全问题,真的是一种待宰羔羊的无力感。

调试python程序我知道有3个东东:pdb,ipdb,pudb。

第一个是python自带模块,第二个如果安了ipython的话貌似自己就被安装了,最后一个有图形界面,十分复古的——蓝底,真是让人怀念。后2个都可以使用pip安装。 ipdb支持语法高亮,不过貌似中文支持不太好。

pubd更加适合调试单独的python程序,可以看到全部的代码以及栈、变量、断点,不知道嵌入django什么效果。不过另外两个更容易和django结合。

有3种调用方式:

  1. 命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一行之前。python -m ipdb myscript.py

  2. 在Python交互环境中启用调试。

import ipdb
import mymodule
ipdb.run(‘mymodule.test()’)
  1. 比较常用的,就是在程序中间插入一段程序,相对于在一般IDE里面打上断点然后启动debug,不过这种方式是hardcode的
import ipdb
ipdb.set_trace() # 开启pdb提示

pdb和ipdb命令大多通用: - dir() 方法 可以查看一个对象有那些方法可以调用 常用 - h(elp),会打印可用的命令,如果要查询某个命令,可以输入 h [command] - l(ist),可以列出当前将要运行的代码块,只有几行 - disable/enable,禁用/激活断点 - b(reak), 设置断点,例如 “b 77″,就是在当前脚本的77行打上断点,还能输入函数名作为参数,断点就打到具体的函数入口,如果只敲b,会显示现有的全部断点
- condition bpnumber [condition],设置条件断点 - cl(ear),如果后面带有参数,就是清除指定的断点,如果不带参数就是清除所有的断点 - n(ext),让程序运行下一行,如果当前语句有一个函数调用,用n是不会进入被调用的函数体中的 - s(tep),跟n相似,但是如果当前有一个函数调用,那么s会进入被调用的函数体中 - c(ont(inue)),让程序正常运行,直到遇到断点 - j(ump),让程序跳转到指定的行数 - a(rgs),打印当前函数的参数 常用 - p,打印某个变量 常用 - q(uit),退出调试 - w(here),回溯调用过程 - d(own), 后退一步帧(注:相当于回滚) - u(p), 前进一步帧 - (回车), 重复上一条指令 - run(restart)重新执行


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK