1. 日志

通过日志或者print来打印变量。必要时可以打印locals()globals()

建议使用logging.debug()来代替print,这样到了正式环境,就可以统一删除这些日志。

2.trace

Python有个trace模式,可以打印整个程序的执行流

# encoding=utf8
def f():
print 'aa' if __name__ == '__main__':
f()

例如这段简单的程序,执行python -mtrace --trace test.py就会输出下面的日志:

 --- modulename: test, funcname: <module>   # test模块,module级函数
test.py(2): def f(): #test.py的第2行,执行def f命令定义函数
test.py(6): if __name__ == '__main__':
test.py(7): f()
--- modulename: test, funcname: f
test.py(3): print 'aa'
aa
--- modulename: trace, funcname: _unsettrace
trace.py(80): sys.settrace(None)

可以详细得看到这代代码在Python中的执行流程。

当代码比较复杂,例如调用了一些第三方库,这个trace日志就会非常多,所以最好重定向到一个文件里面,慢慢分析。

3.PDB

# encoding=utf8
import pdb
def f2():
a = 1
pdb.set_trace() # 设置断点
b = 2
c = a + b
pdb.set_trace() if __name__ == '__main__':
f2()

在代码里面设置断点。执行代码python -mpdb test.py,就可以调试程序了。进程会在断点处暂停运行,等待我们执行命令

(vsing_env) [root@www script]# python -mpdb  test.py
> /data/selfmoe_backend/script/test.py(2)<module>()
-> import pdb
(Pdb) c
> /data/selfmoe_backend/script/test.py(13)f2()
-> b=2
(Pdb) p a
1
(Pdb) l
8 cli=redis.Redis(host='127.0.0.1',port='6801')
9 cli.get('test')
10 def f2():
11 a=1
12 pdb.set_trace()
13 -> b=2
14 c=a+b
15 pdb.set_trace()
16 if __name__ == '__main__':
17 f2()
[EOF]

断点处可以执行的命令有:

  • c continue 继续
  • q quit 退出
  • l list 显示断点前后的源码
  • w or where 回溯执行到当前断点的过程
  • d down 回溯的下一页
  • u up 回溯的上一页
  • 回车 重复最后一个命令,例如就不用一直按c,可以只按回车

其他分支

  • ipdb pdb的基础上增加颜色,自动补齐
  • pudb gui版本
  • winpdb 远程调试,在windows调试linux的进程

上面几个库的接口和pdb都是一样的。

4.Pycharm

使用Pycharm这个IDE进行调试。这个功能就比较强大了。

Pycharm也支持远程调试。也就是在windows界面操作,进程运行在linux。

方法是:

  1. Settings-Project Interpreter 里面点击Project Interpreter右边的配置,点击Add
  2. 选择SSH Interpreter
  3. 如果已有远程同步代码配置,就选择Existing Server configuration
  4. 否则就选择New server configuration ,设置远程机的IP和ssh端口和用户名,密码等
  5. 设置远程机的Python地址,例如/data/env/bin/python
  6. 设置Sync folders。这个是windows和远程机的目录映射,例如E://project映射到/data/project。那如果执行E://project/test.py脚本就相当于执行/data/project/test.py脚本
  7. 创建测试的脚本,test.py
  8. 打开Run-Edit Configurations,修改test.pyPython interpreter为刚才设置的Remote Python
  9. 点击 run test.py 就能在远程机执行这个脚本了,console会展示远程机的console
  10. 除了run,也可以debug

参考:

Python调试工具

Python调试工具的更多相关文章

  1. 我常用的 Python 调试工具 - 博客 - 伯乐在线

    .ckrating_highly_rated {background-color:#FFFFCC !important;} .ckrating_poorly_rated {opacity:0.6;fi ...

  2. python调试工具pdb

    pdb是基于命令行的调试工具,非常类似gnu的gdb(调试c/c++). 命令 简写命令 作用 break b 设置断点 continue c 继续执行程序 list l 查看当前行的代码段 step ...

  3. Python调试工具-Spyder

    OS:Windows 7 关键字:Python IDE, Spyder 1.安装工具pip:https://pip.pypa.io/en/latest/installing.html 下载 get-p ...

  4. 常用的 Python 调试工具,Python开发必读-乾颐堂

    以下是我做调试或分析时用过的工具的一个概览.如果你知道有更好的工具,请在评论中留言,可以不用很完整的介绍. 日志 没错,就是日志.再多强调在你的应用里保留足量的日志的重要性也不为过.你应当对重要的内容 ...

  5. Python 调试工具PySnooper

    相信很多小伙伴平时写python的时候都是需要调试程序的,出问题了,需要了解函数内部是怎么跑的,而这个时候很多人都会想到在疑惑的地方使用print函数来打印一下参数来调试.虽然用print也是不失为是 ...

  6. python调试工具remote_pdb

    介绍一个调试python代码的工具:remote_pdb https://pypi.org/project/remote-pdb/ 安装 pip install remote-pdb 使用 1,设置断 ...

  7. python 调试工具

    https://github.com/what-studio/profiling http://blog.jobbole.com/51062/ http://blog.jobbole.com/5209 ...

  8. python调试工具----pycharm快捷键及一些常用设置

    pycharm快捷键及一些常用设置 Alt+Enter 自动添加包Ctrl+t SVN更新Ctrl+k SVN提交Ctrl + / 注释(取消注释)选择的行Ctrl+Shift+F 高级查找Ctrl+ ...

  9. 一个牛逼的 Python 调试工具PySnooper

    原文转自:https://mp.weixin.qq.com/s/OtLr-cNethboMgmCcUx2pA PySnooper 使用起来十分简单,开发者可以在任何庞大的代码库中使用它,而无需进行任何 ...

随机推荐

  1. zookeeper特性与节点说明

    一.zookeeper概要.背景及作用 zookeeper产生背景: 项目从单体到分布式转变之后,将会产生多个节点之间协同的问题.如: 每天的定时任务由谁哪个节点来执行? RPC调用时的服务发现? 如 ...

  2. 2017春季_京东_Java后端研发岗面经

    纸上得来终觉浅,绝知此事要躬行  ——2017春季Java后端研发工程师面试心得 收获offer:上海汉得+北京中科软+成都百词斩+成都诺基亚研发中心+清华大学计算机研究所等offer.阿里一面猝.京 ...

  3. 【SQL server基础】SQL视图加密,永久隐藏视图定义的文本

    SQL可以对视图进行加密.也就是,可永久隐藏视图定义的文本. 注意   此操作不可逆.加密视图后,无法再修改它,因为无法再看到视图定义.如果需要修改加密视图,则必须删除它并重新创建另一个视图. 示例代 ...

  4. 微信小程序 实现多行文字 超出部分省略号显示

    在开发小程序: 澳买 的 时候 遇到一个棘手的问题: 当搜索澳洲产品,获取产品列表的时候,有时候产品的名称翻译成中文特别长 我们不能全部在有限的列表里面把产品名都显示出来,这样格式不好控制,显示 出来 ...

  5. EF Core 实现读写分离的最佳方案

    前言 公司之前使用Ado.net和Dapper进行数据访问层的操作, 进行读写分离也比较简单, 只要使用对应的数据库连接字符串即可. 而最近要迁移到新系统中,新系统使用.net core和EF Cor ...

  6. C++——指针

    目录 一.地址和指针 1.1内存 1.2针和指针变量 二.指针变量 2.1始化 2.2赋值 2.3指针类型算术运算 2.4指针类型关系运算 2.5指向指针的指针 三.指针与数组 3.1指针运算 3.2 ...

  7. hadoop之yarn详解(基础架构篇)

    本文主要从yarn的基础架构和yarn的作业执行流程进行阐述 一.yarn的概述 Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管 ...

  8. MongoDB 学习笔记之 索引

    索引: db.media.createIndex({"Tracklist": 1}) 1表示升序 -1表示降序 我们要着重看一下对数组创建索引的情况. 构建一个集合:db.medi ...

  9. java并发之CAS详解

    前言 在高并发的应用当中,最关键的问题就是对共享变量的安全访问,通常我们都是通过加锁的方式,比如说synchronized.Lock来保证原子性,或者在某些应用当中,用voliate来保证变量的可见性 ...

  10. springboot 自定义LocaleResolver切换语言

    springboot 自定义LocaleResolver切换语言 我们在做项目的时候,往往有很多项目需要根据用户的需要来切换不同的语言,使用国际化就可以轻松解决. 我们可以自定义springboor中 ...