pdb 调试 python 代码

pdb

python的官方调试工具; 默认下载的模块

参考文档

  • pdb
  • pdb有官方文档, 也有源码, 可能阅读python源码更容易理解;

gdb非常相似,也支持扩展; 基于bdb,cmd拓展;

代码中设置调试点(一次性调试)

好处是可以源码级别的调试, 对于刚了解pdb又想调试子进程的比较友好;

pdb模块显式调用进入调试

即源码级别的支持; gdb目前无法做到;

# 在想要调试前的位置设置断点
import pdb; pdb.set_trace()

breakpoint内置函数也可以:更推荐, 不用import pdb, 但这是一次性调试, 需要手动指定左右的点, 一般要在最开始加;

从头调试:强烈推荐

格式

python -m pdb myscript.py

说明

import pdb; breakpoint并非是非此即彼, 水火不容的关系, 建议结合使用效果更佳;

调试指令说明

  • 全称和缩写(常用): 缩写有单个字母或两个字母; h(elp)
  • 指令补全(常用): 指令可以补全;
  • 空白行(常用): 重复执行上一条,list指令特殊;
  • 非法指令: 当成python脚本解析(不推荐这种);
  • 执行脚本(常用): 后面的内容强行当成python脚本执行, 交互式的执行一些函数;
  • 执行多条pdb指令: ;;进行分隔两个指令, string也会影响, 建议拆分';'';'(解析器不够智能?); ;不合法, 且不补全, 不推荐;
  • .pdbrc : 配置

h(elp) [command]

  • 未指定[command]参数, 输出pdb支持指令
  • 指定[command]参数, 输出参数帮助文档;
(Pdb) helpDocumented commands (type help <topic>):
========================================
EOF    c          d        h         list      q        rv       undisplay
a      cl         debug    help      ll        quit     s        unt      
alias  clear      disable  ignore    longlist  r        source   until    
args   commands   display  interact  n         restart  step     up       
b      condition  down     j         next      return   tbreak   w        
break  cont       enable   jump      p         retval   u        whatis   
bt     continue   exit     l         pp        run      unalias  where    Miscellaneous help topics:
==========================
exec  pdb(Pdb) help c
c(ont(inue))Continue execution, only stop when a breakpoint is encountered.
  • 也可以使用!help(xxx)查看函数或类之类; (python内置help指令)

堆栈操作

w[here], bt: 输出当前栈, >表示当前栈帧

(Pdb) bt/usr/lib/python3.10/bdb.py(597)run()
-> exec(cmd, globals, locals)<string>(1)<module>()
> /home/ch/ch/pyfile/debug/test.py(2)<module>()
-> re.match("xxx", "")
(Pdb) where/usr/lib/python3.10/bdb.py(597)run()
-> exec(cmd, globals, locals)<string>(1)<module>()
> /home/ch/ch/pyfile/debug/test.py(2)<module>()
-> re.match("xxx", "")

调整栈帧:d(own) [count]

向下移动栈帧; [count]表示移动数量, 未指定默认用1;

调整栈帧:u(p) [count]

向上移动栈帧; [count]表示移动数量, 未指定默认用1;

栈帧移动: gdb则是用f num的形式移动到指定

断点操作

断点设置: b(reak) [([filename:]lineno | function) [, condition]]

  • tb(reak) [([filename:]lineno | function) [, condition]]
  • 一次性断点: b(reak)永久, tbreak一次性;
  • [filename:]lineno: 行级别指定断点, 可以指定文件, 否则以当前文件为准; 从sys.path目录下搜索
  • function: 函数, 这种需要import了之后才可以生效;
  • condition: 表达式为True的时候才会中断;

删除断点: cl(ear) [filename:lineno | bpnumber ...]

  • 无参数清理所有
  • filename:lineno: 清理所在行的所有断点;
  • bpnumber ...: 空格分隔, 删除对应编号的断点; b查看;

禁用断点: disable bpnumber [bpnumber ...]

禁用指定编号的断点(同时指定多个), 可用b指令查看所有;

启动断点: enable bpnumber [bpnumber ...]

启用指定编号的断点(同时指定多个), 可用b指令查看所有;

跳过断点: ignore bpnumber [count]

  • 忽略某个断点count,未指定默认0次, 即指令就像未生效; 可用b指令查看所有;

对某个断点添加触发条件: condition bpnumber [condition]

  • 添加bool表达式, 用于判断断点是否触发;
  • 无条件则表示删除;

断点触发时执行额外指令: commands [bpnumber]

  • 对指定bpnumber或刚才指定的断点添加额外指令; end结束;
  • 删除则相当于添加新的, 但是空;
  • silent则不输出断点信息;
(Pdb) commands 1
(com) p some_variable
(com) end
(Pdb)
  • commands中有一下任意一个都恢复执行, 就好像同时加了command, end: continue, step, next, return, jump, quit and their abbreviations;

调试代码

下一条指令: s(tep)遇到函数就跳到函数里, 否则就下一条指令;

下一条和下一行有很大区别;

下一行指令: n(ext)一行有多个指令也下一行

unt(il) [lineno]: 一直执行直到, 中间有断点也停止;

until有点类似一次性断点;

r(eturn)

执行完当前函数后, 返回并暂停调试;

c(ont(inue))

恢复执行

j(ump) lineno: 同一帧的跳转, 类似c goto;

直接跳转到指定行执行; 可以往回, 也可以往后;

调试时查看源码

l(ist) [first[, last]]

  • 无参: 当前行往后11行, 累加;
  • first: .当前往后11行; 或者指定行后11行;
  • first, last: 输出区间的代码

->: 表示当前行;
>>: 异常抛出位置;

ll | longlist

当前函数或当前栈帧的所有代码;

变量查看

a(rgs): 当前函数参数

(Pdb) b re.match
Breakpoint 1 at /usr/lib/python3.10/re.py:187
(Pdb) c
> /usr/lib/python3.10/re.py(190)match()
-> return _compile(pattern, flags).match(string)
(Pdb) a
pattern = 'xxx'
string = ''
flags = 0

p expression, pp expression

指定表达式值, 类似print(expression)

whatis expression

输出表达式类型, 表达式可以是一个变量, 也可以是函数执行返回类型;

source expression

查看表达式源码定义;

display [expression]

每次执行, 查看值的前后变化;

retval:查看函数上次返回值;

interact

进入交互式, 即成当前上下文;

q(uit)

退出整个程序

指令操作

alias [name [command]]: 别名

unalias name: 取消别名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型有什么意义?亚马逊训练自己的大语言模型有什么用?

近年来&#xff0c;大语言模型的崭露头角引起了广泛的关注&#xff0c;成为科技领域的一项重要突破。而在这个领域的巅峰之上&#xff0c;亚马逊云科技一直致力于推动人工智能的发展。那么&#xff0c;作为一家全球科技巨头&#xff0c;亚马逊为何会如此注重大语言模型的研发与…

解读 | GPT-4突然“变赖“ 是莫名其妙还是另有玄机

大家好&#xff0c;我是极智视界&#xff0c;欢迎关注我的公众号&#xff0c;获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码和资源下载&#xff0c;链接&#xff1a;https://t.zsxq.com/0aiNxERDq 事情是这样的&#…

初学websocket有感-待研究

https://www.bilibili.com/video/BV1KN411n7WD/ 看到一半的时候就会想到以下的问题&#xff1a; 初学websocket有感-待研究 既然每一个endPoint都是对应着一个服务器和客户端浏览器的连接对象&#xff0c;那么就是说要创建很多个endPoint对象咯。 一、是否回将创建的这么多…

项目经理和产品经理哪个更有发展前景?

如果是单看“钱途”的话&#xff0c;如果是在传统行业&#xff0c;可能差不多&#xff1b;如果是在IT行业的话&#xff0c;可能更需要项目经理&#xff1b;互联网行业的话&#xff0c;可能更需要产品经理。 项目经理跟产品经理两个证都挺受市场欢迎的&#xff0c;两个岗位职责…

关东升老师Python著作推荐(由电子工业出版社出版)

前言&#xff1a;关东升老师简单介绍 一个在IT领域摸爬滚打20多年的老程序员、软件架构师、高级培训讲师、IT作家。熟悉Java、Kotlin、Python、iOS、Android、游戏开发、数据库开发与设计、软件架构设计等多种IT技术。参与设计和开发北京市公交一卡通百亿级大型项目&#xff0c…

钓鱼网站域名识别工具dnstwist算法研究

先上一个AI的回答&#xff1a; dnstwist是一种钓鱼网站域名识别工具&#xff0c;可帮助用户识别和检测可能被恶意使用的域名。它通过生成类似的域名变体来模拟攻击者可能使用的钓鱼域名&#xff0c;并提供了一系列有用的功能和信息。 dnstwist能够生成一组类似的域名变体&…

HTML常见的列表标签

目录 &#x1f367;无序列表&#x1f367;有序列表&#x1f367; 定义列表&#x1f367; 菜单列表 &#x1f367;无序列表 ulli的组合,ul标签与li标签之间尽量不要写标签或内容 列表可以嵌套多层 type属性&#xff0c;可以指定序号的类型 可选值&#xff1a;默认值&#xff0c;…

15:00面试,15:06就出来了,问的问题太变态了。。

刚从小厂出来&#xff0c;没想到在另一家公司我又寄了。 在这家公司上班&#xff0c;每天都要加班&#xff0c;但看在钱给的比较多的份上&#xff0c;也就不太计较了。但万万没想到5月一纸通知&#xff0c;所有人不准加班了&#xff0c;不仅加班费没有了&#xff0c;薪资还要降…

有病但合理的 ChatGPT 提示语

ChatGPT 面世一年多了&#xff0c;如何让大模型输出高质量内容&#xff0c;让提示词工程成了一门重要的学科。以下是一些有病但合理的提示词技巧&#xff0c;大部分经过论文证明&#xff0c;有效提高 ChatGPT 输出质量&#xff1a; ​1️⃣ Take a deep breath. 深呼吸 ✨ 作用…

ChatGPT胜过我们人类吗?

引言 人工智能&#xff08;AI&#xff09;一直是众多技术进步背后的驱动力&#xff0c;推动我们走向曾经是科幻小说领域的未来。这些进步的核心引出这样一个深刻的问题&#xff1a;机器能思考吗&#xff1f;这一问题由英国数学家和计算机科学家艾伦图灵&#xff08;Alan Turin…

SSL安全证书怎么查看证书类型?

SSL安全证书是一种用于确保互联网通信安全的协议。它通过加密数据传输以保护敏感信息不被窃取或篡改。在浏览器中&#xff0c;我们可以轻松查看SSL安全证书的类型。本文将详细介绍如何查看证书类型&#xff0c;并探讨不同类型的SSL证书的用途和特点。 要查看SSL安全证书的类型&…

关于粒子群算法的一些简单尝试

粒子群算法核心思想&#xff1a;&#xff08;鸟 粒子&#xff09; &#xff08;1&#xff09;许多的鸟站在不同的地方&#xff1b; &#xff08;2&#xff09;每一只鸟都有自己寻找食物的初始飞行方向、飞行速度&#xff1b; &#xff08;3&#xff09;这些鸟儿每隔一段时间…

ISP-EE(Edge Enhance)

ISP-EE(Edge Enhance) EE模块在某些ISP主控中叫做sharpness或者sharpen&#xff0c;这些名称指代的模块是同一个&#xff0c;不用再纠结。主要就是在YUV域内弥补成像过程中图像的锐度损失&#xff0c;对边缘和细节进行加强&#xff0c;从而恢复场景本应具有的自然锐度。 锐度…

Linux基础指令(2)

今天我们继续来学我们有关于Linux的指令&#xff0c;今天的指令要比上次多多了。开始我们的学习吧。 man手册 先来看标题&#xff0c;手册我们第一时间想到的就是手册的查阅功能&#xff0c;我们都知道在我们上小学的时候&#xff0c;如果遇到不会的字&#xff0c;我们会通过…

网络工程师【目录】

前言 从2023年下半年开始&#xff0c;所有的软考全面改革&#xff0c;由原来的笔试改为机考&#xff0c;据说难度会有一些增加&#xff0c;望悉知。 报名地址&#xff1a;中国计算机技术职业资格网 历史报名时间和考试时间&#xff1a;3月份报名&#xff0c;5月底考试&#xf…

互联网商业史--1.3Q大战

一.起因 奇虎360与腾讯间的纠葛被业界形象地称为“3Q大战”。 这场大战源于双方之间的“互掐”。 双方为了各自利益&#xff0c;从2010年到2014年&#xff0c;上演了一系列互联网之战&#xff0c;并走上诉讼之路 腾讯先是推出QQ医生1.0&#xff0c;随后推出QQ医生3.2&#x…

【wvp】无响应sip 日志记录

23-12-11 17:25:18.179 [https-jsse-nio-8970-exec-7] INFO c.g.wvp.vmp.gb28181.transmit.cmd.impl.SIPCommander - 34010200001130000006_34010200001310000006 分配的ZLM为: wvpmediaserver001 [10.30.2.8:30406] 2023-12-11 17:25:18.337 [wvp-9] INFO c.g.w.v.g.t.e.r.i…

【高数:3 无穷小与无穷大】

【高数&#xff1a;3 无穷小与无穷大】 1 无穷小与无穷大2 极限运算法则3 极限存在原则4 趋于无穷小的比较 参考书籍&#xff1a;毕文斌, 毛悦悦. Python漫游数学王国[M]. 北京&#xff1a;清华大学出版社&#xff0c;2022. 1 无穷小与无穷大 无穷大在sympy中用两个字母o表示无…

IvorySQL荣获 OSCHINA「2023 年度优秀开源技术团队」奖

2023 年&#xff0c;OSCHINA 综合平台上各大认证官方技术团队、开源社区帐号年度发表的内容深度及广度、开展各种活动运营影响力等多方面的表现&#xff0c;瀚高股份IvorySQL荣获 OSCHINA颁布的「2023 年度优秀开源技术团队」奖项。未来&#xff0c;IvorySQL将继续为国内开源事…

golang游戏服务器 - tgf系列课程04

用户登录 介绍了如何使用tgf自带的登录功能进行用户的登录操作,并且编写机器人客户端的一个模拟请求代码需求描述 用户请求登录,登录成功之后请求HelloWorld接口.Common 接口定义和生成接口定义 新增登录接口 type IHallService interface {Login(ctx context.Context, args…