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]#
目录
相关文章
|
12天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
2月前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
56 6
|
24天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
29天前
|
人工智能 自然语言处理 算法
随机的暴力美学蒙特卡洛方法 | python小知识
蒙特卡洛方法是一种基于随机采样的计算算法,广泛应用于物理学、金融、工程等领域。它通过重复随机采样来解决复杂问题,尤其适用于难以用解析方法求解的情况。该方法起源于二战期间的曼哈顿计划,由斯坦尼斯拉夫·乌拉姆等人提出。核心思想是通过大量随机样本来近似真实结果,如估算π值的经典示例。蒙特卡洛树搜索(MCTS)是其高级应用,常用于游戏AI和决策优化。Python中可通过简单代码实现蒙特卡洛方法,展示其在文本生成等领域的潜力。随着计算能力提升,蒙特卡洛方法的应用范围不断扩大,成为处理不确定性和复杂系统的重要工具。
69 21
|
27天前
|
数据挖掘 数据处理 开发者
Python3 自定义排序详解:方法与示例
Python的排序功能强大且灵活,主要通过`sorted()`函数和列表的`sort()`方法实现。两者均支持`key`参数自定义排序规则。本文详细介绍了基础排序、按字符串长度或元组元素排序、降序排序、多条件排序及使用`lambda`表达式和`functools.cmp_to_key`进行复杂排序。通过示例展示了如何对简单数据类型、字典、类对象及复杂数据结构(如列车信息)进行排序。掌握这些技巧可以显著提升数据处理能力,为编程提供更强大的支持。
34 10
|
2月前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33
|
2月前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
337 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
2月前
|
JavaScript API C#
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
54 10
|
2月前
|
安全
Python-打印99乘法表的两种方法
本文详细介绍了两种实现99乘法表的方法:使用`while`循环和`for`循环。每种方法都包括了步骤解析、代码演示及优缺点分析。文章旨在帮助编程初学者理解和掌握循环结构的应用,内容通俗易懂,适合编程新手阅读。博主表示欢迎读者反馈,共同进步。
|
2月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
108 8

热门文章

最新文章