Linux 下如何调试 Python?
一般开发者都是在 IDE 中进行程序的调试,当然,有 IDE 的话,当然首选 IDE 进行调试。
但是,有时我们的业务场景,限制只能在 Linux 命令行模式进行调试。
这时该怎么办呢?
今天,就给大家介绍一个 Linux 下调试 Python 程序的工具。
pdb简介
pdb 调试器是 Python 标准库提供的,因此最为方便,不需要安装其他组件,直接 import 后就能使用。
pdb 调试器提供了调试所需的大多数功能,如断点、单行步进、堆栈帧的检查等等。
常用命令
l # 查看运行到哪行代码
n # 单步运行,跳过函数
s # 单步运行,可进入函数
p 变量 # 查看变量值
b 行号 # 断点设置到第几行
b # 显示所有断点列表
cl 断点号 # 删除某个断点
cl # 删除所有断点
c # 跳到下一个断点
r # return 当前函数
exit # 退出
使用示例
本文 Python 环境:Python 3.5.2
我们先准备一小段演示程序:
# -*- coding: utf-8 -*-
def add(a, b):
return a + b
if __name__ == '__main__':
print("===start===")
c = add(1, 3)
print("===end===")
使用方法 1:
运行 pdb 的最简单方法是从命令行,将程序作为参数传递来调试。
$ python -m pdb test_pdb.py
这时,就开始单步执行了。

这种方法对代码没有侵入性,但是每次都需要设置断点。
使用方法 2:
在代码头部引入 pdb,然后可以在代码里,通过 pdb.set_trace() 来设置断点:
# -*- coding: utf-8 -*-
import pdb
def add(a, b):
pdb.set_trace()
return a + b
if __name__ == '__main__':
print("===start===")
pdb.set_trace()
c = add(1, 3)
print("===end===")
此时,运行程序,就会自动跳转到设置的断点处:

总结
没了图形化页面,调试只能这么来了,不过还好,pdb 使用看着不难吧。
其实还有一些增强的调试器,比如 IPython 的 ipdb 和 pdb++,它们一般都提供了更好的用户体验,添加了有用的额外功能,例如语法突出高亮、更好的回溯和自省。
后面有机会再给大家分享吧!
Linux 下如何调试 Python?的更多相关文章
- [转]linux下编译boost.python
转自:http://blog.csdn.net/gong_xucheng/article/details/25045407 linux下编译boost.python 最近项目使用c++操作python ...
- Linux知识(5)----LINUX下GDB调试
命令 解释 示例 file 加载被调试的可执行程序文件.因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径. (gdb) file gdb-sample r c Run的简 ...
- 一文入门Linux下gdb调试(二)
作者:良知犹存 转载授权以及围观:欢迎添加微信号:Conscience_Remains 总述 今天我们介绍一下core dump文件,Core dump叫做核心转储,它是进程运行时在突然崩溃的 ...
- Linux下安装OpenCV+Python支持
以下说明在Linux下Python和OpenCV结合安装的过程,Python要使用OpenCV模块,则必须导入OpenCV提供的包,所以要提供Python支持,首先在安装OpenCV前安装必要的组件, ...
- HDP2.0.6+hadoop2.2.0+eclipse(windows和linux下)调试环境搭建
花了好几天,搭建好windows和linux下连接HDP集群的调试环境,在此记录一下 hadoop2.2.0的版本比hadoop0.x和hadoop1.x结构变化很大,没有eclipse-hadoop ...
- 中标麒麟(linux)下Qt调用python
转自:https://blog.csdn.net/lwlgzy/article/details/83857297 http://www.cnblogs.com/jiaping/p/6321859.ht ...
- linux下线程调试 ulimit core
在linux 下写线程程序的同学预计都遇到过找bug找到崩溃的情况.多线程情况下bug的追踪实在是不easy. 如今我来介绍一个好用的方法 ulimit core. 先简介一下ulimit是个什么(你 ...
- linux下dubbo调试 ---telnet命令
linux下启动dubbo服务端, 怎么调试? 方法有二: 1. 自己写简单消费者功能,进行各种情况测试.(这确实是有必要的) 2. 使用telnet直接连接上dubbo,使用命令调用,然后调试.(这 ...
- Linux下/usr/bin/python被删除的后果
可能部分的人使用linux都有直接root登陆的习惯,这有很大的便利性,因为很多的命令不需要使用sudo请求root权限.但是使用root权限,所有的命令都会立即被执行,即使这个命令是对系统有害处的. ...
随机推荐
- redis操作封装整理
<?php /** * redis操作类 * 说明,任何为false的串,存在redis中都是空串. * 只有在key不存在时,才会返回false. * 这点可用于防止缓存穿透 * */ cla ...
- Linux Shell基础 位置参数变量、预定义变量
位置参数变量 在 Linux 的命令行中,当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数.其中,$0 代表命令行本身,$1 代表第 1 个参数,$2 代表第 2 个参数 ...
- NIO、Servlet3.0、HTTP1.1
J2EE 6和Glassfish 3V正式发布了,J2EE 6正式发布了Servlet3.0, 为了能更好的对WEB2.0提供支持, 3.0添加了异步处理的机制. HTTP1.1相对于HTTP1.0的 ...
- 3D立方体图片切换动画
在线演示 本地下载
- Hadoop程序基础模板
分布式编程相对复杂,而Hadoop本身蒙上大数据.云计算等各种面纱,让很多初学者望而却步.可事实上,Hadoop是一个很易用的分布式编程框架,经过良好封装屏蔽了很多分布式环境下的复杂问题,因此,对普通 ...
- 关于C++ 中的this 的理解
关键字this 通常被用在一个class内部,指正在被执行的该class的对象(object)在内存中的地址.它是一个指针,其值永远是自身object的地址.
- maven项目在打war包时出现非法字符: '\ufeff' 解决方案
问题描述: 开发工具MyEclipse 的总体开发环境,编码格式总体设置为UTF-8,在将web项目打包的时候出现:非法字符:'\ufeff" 错误. 解决方案: 利用notePad++打开 ...
- 【转载】树链剖分.By.Xminh
轻重链剖分 其实就是俗称的树链剖分. PS:树链剖分不止有轻重链剖分.但是大多数时候的树链剖分指的就是轻重链剖分. dfs序 给树的节点重新编号,使得任意一个节点满足子树的dfs序都比它要大,而且它子 ...
- Java注解处理器
Java注解处理器 2015/03/03 | 分类: 基础技术 | 0 条评论 | 标签: 注解 分享到:1 译文出处: race604.com 原文出处:Hannes Dorfmann Java ...
- IntelliJ Idea 免费激活方法免激活码
1. 到网站 http://idea.lanyus.com/ 获取注册码. 2.填入下面的license server: http://intellij.mandroid.cn/ http://ide ...