pdb--python调试利器

发布时间 - 2025-07-18 00:00:00    点击率:

一、调试模块

要调试模块,可以使用Python的pdb模块。以下是如何在模块中使用pdb的示例:

>>> import pdb
>>> import mymodule
>>> pdb.run('mymodule.test()')
> (0)?()
(Pdb) continue
> (1)?()
(Pdb) continue
NameError: 'spam'
> (1)?()
(Pdb)

二、调试脚本

要调试脚本,可以使用Python的pdb模块启动调试器。以下是如何在脚本中使用pdb的示例:

python3 -m pdb myscript.py

三、代码中打堆栈(3.7版本内置了该功能)

在代码中设置断点并进入调试模式,可以使用以下命令:

import pdb;pdb.set_trace()

四、查看crashed program

如果程序崩溃,可以使用pdb查看崩溃时的堆栈信息。以下是如何在崩溃后使用pdb的示例:

>>> import pdb
>>> import mymodule
>>> mymodule.test()
Traceback (most recent call last):
  File "", line 1, in 
  File "./mymodule.py", line 4, in test
    test2()
  File "./mymodule.py", line 3, in test2
    print(spam)
NameError: spam
>>> pdb.pm()
> ./mymodule.py(3)test2()
-> print(spam)
(Pdb)

五、主要函数

六、实现自定义功能可以修改pdb.Pdb类

可以通过修改pdb.Pdb类来实现自定义调试功能。例如,要跳过特定模块,可以这样做:

import pdb; pdb.Pdb(skip=['django.*']).set_trace()

七、调试命令

以下是pdb调试器中常用的命令:

  • h(elp) [command]:显示帮助信息或特定命令的帮助信息。
  • w(here):打印堆栈跟踪,最近的帧在底部。箭头指示当前帧。
  • d(own) [count]:将当前帧向下移动count级(默认为1级),进入较新的帧。
  • u(p)[count]:将当前帧向上移动count级(默认为1级),进入较旧的帧。
  • b(reak) [([filename:]lineno | function) [, condition]]:设置断点。
  • tbreak [([filename:]lineno | function) [, condition]]:设置临时断点。
  • cl(ear) [filename:lineno | bpnumber ...]:清除断点。
  • disable [bpnumber ...]:禁用断点。
  • enable [bpnumber ...]:启用断点。
  • ignore bpnumber [count]:设置断点的忽略计数。
  • condition bpnumber [condition]:为断点设置条件。
  • commands [bpnumber]:为断点指定命令列表。
  • s(tep):执行当前行,在第一次可能的场合停止
  • n(ext):继续执行直到当前函数的下一行或返回。
  • unt(il) [lineno]:继续执行直到达到当前行号之后的行。
  • r(eturn):继续执行直到当前函数返回。
  • c(ont(inue)):继续执行,仅在遇到断点时停止。
  • j(ump) lineno:设置将要执行的下一行。
  • l(ist) [first[, last]]:列出当前文件的源代码。
  • ll | longlist:列出当前函数或帧的所有源代码。
  • a(rgs):打印当前函数的参数列表。
  • p expression:在当前上下文中评估表达式并打印其值。
  • pp expression:与p命令类似,但使用pprint模块进行美观打印。
  • whatis expression:打印表达式的类型。
  • source expression:尝试获取给定对象的源代码并显示。
  • display [expression]:每次在当前帧中停止执行时显示表达式的值。
  • undisplay [expression]:不在当前帧中显示表达式。
  • interact:启动一个交互式解释器。
  • alias [name [command]]:创建一个名为name的别名,执行command。
  • unalias name:删除指定的别名。
  • ! statement:在当前堆栈帧的上下文中执行语句。
  • run [args ...]:重新启动调试的Python程序。
  • restart [args ...]:restart是run的别名。
  • q(uit):退出调试器,终止正在执行的程序。
  • debug code:进入递归调试器,逐步执行代码参数。
  • retval:打印函数最后一次返回的返回值。


# linux  # python  # python程序 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何生成和使用数据填充?(Seeder和Factory示例)  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  如何用花生壳三步快速搭建专属网站?  香港服务器如何优化才能显著提升网站加载速度?  如何在Windows服务器上快速搭建网站?  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  Python并发异常传播_错误处理解析【教程】  如何确认建站备案号应放置的具体位置?  香港服务器租用每月最低只需15元?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  JavaScript Ajax实现异步通信  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  利用python获取某年中每个月的第一天和最后一天  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel如何使用Blade组件和插槽?(Component代码示例)  javascript中闭包概念与用法深入理解  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何用低价快速搭建高质量网站?  如何在腾讯云服务器快速搭建个人网站?  原生JS实现图片轮播切换效果  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  浅谈redis在项目中的应用  网站优化排名时,需要考虑哪些问题呢?  Laravel如何使用Blade模板引擎?(完整语法和示例)  如何快速配置高效服务器建站软件?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  音乐网站服务器如何优化API响应速度?  魔方云NAT建站如何实现端口转发?  如何快速搭建虚拟主机网站?新手必看指南  微信小程序 wx.uploadFile无法上传解决办法  如何基于云服务器快速搭建个人网站?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  动图在线制作网站有哪些,滑动动图图集怎么做?  PythonWeb开发入门教程_Flask快速构建Web应用  如何制作一个表白网站视频,关于勇敢表白的小标题?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  如何用搬瓦工VPS快速搭建个人网站?  EditPlus中的正则表达式 实战(4)  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  如何在自有机房高效搭建专业网站?  如何在宝塔面板中创建新站点?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  如何在Windows 2008云服务器安全搭建网站?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  如何在万网利用已有域名快速建站?  如何在IIS中新建站点并配置端口与IP地址?  如何在万网ECS上快速搭建专属网站?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用