pdb 调试
以前写python一直用pycharm,调试啥的比较方便,最近要在远程服务器上调试一些程序,只有一个控制台就可以用pdb进行调试了。常用的只有几个命令。
break 或 b 设置断点 continue 或 c 继续执行程序 list 或 l 查看当前行的代码段 step 或 s 进入函数 return 或 r 执行代码直到从当前函数返回 exit 或 q 中止并退出 next 或 n 执行下一行 pp 打印变量的值 help 帮助
pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。
使用的时候要import pdb再用pdb.set_trace()设置一个断点,运行程序的时候就会停在这。
1、在调试的地方设置断点
import pdb pdb.set_trace() # 设置断点
2、(Pdb) n 进入下一步
3、(Pdb) list 打印代码
4、(Pdb) p b 打印变量
5、(Pdb) s 进入函数
6、(Pdb) !b="afdfd" !动态改变变量值
7 、(Pdb) q 退出
命令
- l : 查看运行的代码段。
(Pdb) l 125 if self.is_cuda: 126 outputs.append(Variable(data.cuda())) 127 else: 128 outputs.append(Variable(data)) 129 pdb.set_trace() 130 -> return tuple(outputs) 131 132 133 class CaffeMultiBoxLoss(nn.Module): 134 def __init__(self, layer, *input_shapes): 135 super(CaffeMultiBoxLoss, self).__init__() (Pdb) c forward_backward time: 1948.931108 1948.931108 > /data/zyj/caffe2pytorch/caffe_layers.py(119)forward() -> data = self.net.blobs[name].data
l + 起始行号,就可以查看行号的上下五行。
l + 起始行号 结束行号,可以查看这么一段。
按完l继续按回车键可以继续往下查看。
- n :运行到下一条语句。
(Pdb) n > /data/zyj/caffe2pytorch/caffe_layers.py(120)forward() -> if self.data_save_debug:
- s : 跳转到函数内部。
- pp + 变量 : 打印变量的值
- c : 运行到下个断点
- r : 运行到函数退出。
(Pdb) r --Return-- >n^H /data/zyj/caffe2pytorch/caffe_layers.py(130)forward()->(Variable...(GPU 0)] , Variable...(GPU 0)] ) -> return tuple(outputs)
- help + [命令]: 帮助。
(Pdb) help Documented commands (type help <topic>): ======================================== EOF bt cont enable jump pp run unt a c continue exit l q s until alias cl d h list quit step up args clear debug help n r tbreak w b commands disable ignore next restart u whatis break condition down j p return unalias where Miscellaneous help topics: ========================== exec pdb Undocumented commands: ====================== retval rv (Pdb) help n n(ext) Continue execution until the next line in the current function is reached or it returns.
- b + 行号:设置断点。
(Pdb) b 125 Breakpoint 2 at /data/zyj/caffe2pytorch/train_wider.py:125
就一个b就是是打印断点在哪。
(Pdb) b Num Type Disp Enb Where 1 breakpoint keep yes at /data/zyj/caffe2pytorch/train_wider.py:121 2 breakpoint keep yes at /data/zyj/caffe2pytorch/train_wider.py:125
- q : 退出。
- j + 行号 :执行到行号
(Pdb) j 119 > /data/zyj/caffe2pytorch/train_wider.py(119)<module>() -> for test_device_id in test_device_ids:
- w : 打印函数栈
(Pdb) w /data/zyj/caffe2pytorch/train_wider.py(112)<module>() -> net.cuda() > /home/zyj/anaconda2/lib/python2.7/site-packages/torch/nn/modules/module.py(216)cuda() -> return self._apply(lambda t: t.cuda(device))
- cl + 断点号: 清除断点
(Pdb) b Num Type Disp Enb Where 1 breakpoint keep yes at /data/zyj/caffe2pytorch/train_wider.py:121 2 breakpoint keep yes at /data/zyj/caffe2pytorch/train_wider.py:125 (Pdb) cl 1 Deleted breakpoint 1 (Pdb) b Num Type Disp Enb Where 2 breakpoint keep yes at /data/zyj/caffe2pytorch/train_wider.py:125
pdb 调试的更多相关文章
- 使用pdb调试python
python pdb调试 python -m pdb myscript.py #注意这会重启myscript.py,这样启动的话,代码每一行都是一个节点 也可以在程序中这么设置断点: import p ...
- python pdb调试以及sublime3快捷键设置
python pdb调试以及sublime3快捷键设置 pdb调试 如果对gdb比较熟悉的话,pdb就很容易上手.以一个demo快速了解常用的调试命令. def test(a): while True ...
- PDB调试模块
这里主要是一些对于调试常用的命令:1.直接通过命令端输入进行调试 以pdb调试模式运行(主要用这个) python3 -m pdb file.py 2.在代码中导入pdb模块 import pdb 功 ...
- pdb调试
[pdb调试] 前置技能: os.getcwd():获取当前工作目录. os.chdir():切换工作目录. 运行 python -m pdb myscript.py (Pdb) 会自动停在第一行,等 ...
- 用pdb调试OpenStack Havana
作为个人学习笔记分享,有任何问题欢迎交流! Note:若是想要用pdb调试OpenStack,必须通过Devstack安装它. Devstack安装Havana过程 1. 使用一般用户(非root ...
- Python 代码使用pdb调试技巧
Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug.python 提供了一系列 debug 的工具和包,可供我们选择.本文将主要阐述如何利用 pyt ...
- python学习笔记之pdb调试
之前一直说要学python可还是一直停留在看的层面,昨天大神手把书教我pdb调试,说要摆脱IDE集成开发环境编程,感激不尽,立一个flag,python一定要入门! 1.进入方式 1)windows ...
- 【转载】Pycharm调试高效,还是pdb调试高效? (在服务端)
https://segmentfault.com/q/1010000005067119 Pycharm调试高效,还是pdb调试高效? (在服务端) python 3.9k 次浏览 问题对人有帮助, ...
- 【Tip】如何让引用的dll随附的xml注释文档、pdb调试库等文件不出现在项目输出目录中
项目输出目录(bin/debug|release)中经常是这个样子: main.exemain.pdb a.dll a.xml b.dll b.pdb b.xml ... 其中xml是同名dll的注释 ...
- pdb调试技巧
1.先import pdb 在适当的位置加上pdb.set_trace(),在cmd中运行脚本,就可以看到调试的提示符 2.常用的调试命令 h(elp),会打印当前版本,pdb可用的命令,如果要查询某 ...
随机推荐
- 初探linux子系统集之写在前言
毕业两周年,进入嵌入式linux这个行业也已两个年头有余,从开始的linux驱动,android的framework,到现在的linux应用,android的app以及产品的零零总总,其实很想把这些都 ...
- java--GUI(图形用户接口)
转载请申明出处:http://blog.csdn.net/xmxkf/article/details/9795435 day22 01-GUI(概述) GUI(图形用户界面) 1. GUI(Griph ...
- IOS中的数据存储方式,特点,使用情况
数据存储的核心都是写文件,主要有四种持久化方式:属性列表(Plist),对象序列化,SQLite数据库,CoreData. 存储Plist: 键值进行存储,不能存储对象.对象需要序列化编码才能写入文件 ...
- WebService学习--(二)webservice相关介绍
一.WebService是什么? 1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据) 2. 一个跨语言.跨平台的规范(抽象) 3. 多个跨平台.跨语言的应用间通信整合的方案(实际 ...
- AS3编程规范
整理了一些AS3的编程规范,有些规则对于大部分语言都是适用的,有什么问题请提出来,我会持续改进这份规范,谢谢! [参考资料] 1.http://opensource.adobe.com/wiki/ ...
- No module named zope.interface error的解决
明明安装了 zope.interface,还是出现标题错误,错误语句是 from zope.interface import ooxx 根据 http://stackoverflow.com/ques ...
- MySQL 的索引优化
索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的.My ...
- Java开源生鲜电商平台-系统简介
Java开源生鲜电商平台-系统简介 1.生鲜电商平台的价值与定位. 生鲜电商平台是一家致力于打造全国餐饮行业智能化.便利化.平台化与透明化服务的创新型移动互联网平台,连接买家与卖家之间的一个平台 看以 ...
- Scala编程入门---数组操作之Array.ArrayBuffer以及遍历数组
在Scala中,Array代表的含义与Java类似,也是长度不可改变的数组.此外,由于Scala与java都是运行在JVM中,双方可以互相调用,因此Scala数组底层实际上是java数组.列如字符串数 ...
- java之Hibernate框架实现数据库操作
之前我们用一个java类连接MySQL数据库实现了数据库的增删改查操作---------MySQL篇: 但是数据库种类之多,除了MySQL,还有Access.Oracle.DB2等等,而且每种数据库语 ...