Python----Python的pdb代码调试方法

简介: Python----Python的pdb代码调试方法

诚然,借助pycharm打断点调试代码确实很简单,很方便,也很明了,但是在实际项目开发中,经常会遇到比如在linux上调试一段代码,没有pycharm等工具支撑的时候,很多人可能会考虑在代码中打印信息来辅助定位,但是如果代码挺多,变量挺多的时候,定位起来就相当的麻烦,所以作为一个合格的python开发者,pdb调试的方法还是要掌握的

下面在linux系统以如下一段代码为例,详细演示如何利用pdb调试,首先需要导入pdb,然后在想调试的位置加上pdb.set_trace(),当程序执行的时候就会从此处进入调试位置,如下就从开始直接进行调试

1 在Linux系统创建demo.py文件,内容如下

import pdb

def get_sum(num):
    sum=0
    
    for i in range(num):
        sum+=i
    return sum
        

if __name__=="__main__":
    pdb.set_trace()
    num=5
    sum=get_sum(num)
    print(sum)

2 开始调试代码

(1)在命令行通过python demo.py执行,可以看到此处有个箭头执向赋值语句,表示即将执行此条语句,即箭头指向的位置尚未执行

[root@redrose2100 opt]# python3 demo.py
> /opt/demo.py(13)<module>()
-> num=5
(Pdb)

(2)输入小写字母 l 可以查看代码上下文 list:

(Pdb) l
  8         return sum
  9
 10
 11     if __name__=="__main__":
 12         pdb.set_trace()
 13  ->     num=5
 14         sum=get_sum(num)
 15         print(sum)
[EOF]
(Pdb)

(3)通过 p xxx 可以打印xxx变量,查看xxx变量当前的值,如下确实验证了num尚未赋值

(Pdb) p num
*** NameError: name 'num' is not defined
(Pdb)

(4)输入 n 执行下一步(next)

(Pdb) n
> /opt/demo.py(14)<module>()
-> sum=get_sum(num)
(Pdb) p num
5
(Pdb)

(5)输入 s 进入到调用函数里面 step,注意,此时如果输入n,则不会进入函数调用,直接将函数调用这一行执行完成,使用s可以进入到函数里面继续看

(Pdb) s
--Call--
> /opt/demo.py(3)get_sum()
-> def get_sum(num):
(Pdb)

(6)此时可以不断的输入n或者p xxx 来调试查看变量

-> def get_sum(num):
(Pdb) n
> /opt/demo.py(4)get_sum()
-> sum=0
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) p sum
0
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) p sum
3
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) n
> /opt/demo.py(6)get_sum()
-> for i in range(num):
(Pdb) n
> /opt/demo.py(7)get_sum()
-> sum+=i
(Pdb) p sum
6
(Pdb) p i
4
(Pdb)

(7)假如现在感觉这个函数已经调试的差不多了,但是并没有执行完,可以输入
r 回到函数调用完成的位置

(Pdb) r
--Return--
> /opt/demo.py(8)get_sum()->10
-> return sum
(Pdb) p sum
10
(Pdb)

(8)假如这个时候感觉已经调试完成了,想结束了,可以直接输入 c,即可结束调试

(Pdb) c
10
[root@redrose2100 opt]#
目录
相关文章
|
19天前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
26 6
|
26天前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
43 3
|
13天前
|
安全
Python-打印99乘法表的两种方法
本文详细介绍了两种实现99乘法表的方法:使用`while`循环和`for`循环。每种方法都包括了步骤解析、代码演示及优缺点分析。文章旨在帮助编程初学者理解和掌握循环结构的应用,内容通俗易懂,适合编程新手阅读。博主表示欢迎读者反馈,共同进步。
|
12天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
54 8
|
19天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
41 11
|
21天前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
34 11
|
17天前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
17天前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
42 6
|
21天前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
91 5
|
22天前
|
Python
如何提高Python代码的可读性?
如何提高Python代码的可读性?
34 4