Pydumpling 0.1.6 发布 —— 针对 Python 程序的异常调试器
针对Python的异常调试器
这是 elifiner/pydump 的fork/优化版本, 主要优化点有:
- 支持在任何地方保存
Python traceback
,而不是只在异常发生的时候 - 优化代码结构, 去除冗余代码
- 修复其在3.10+版本中的bug
- 支持更多的pdb命令
- 提供了一个方便用来调试的命令行工具
- 支持服务器远程调试(remote pdb)
pydumpling可以在代码的任何位置中,将当前Python程序的traceback写到一个文件中,可以稍后在Python调试器中加载它。目前pydump支持很多兼容PDB api的调试器(pdbpp, udb, ipdb)
为什么会有Pydump?
- 我们在日常代码编写中,通常都会用
try ... except ...
去捕获程序中出现的异常,但是我们真的知道这些异常出现的原因吗? - 当你的项目在线上运行时,突然出现了不符合预期的异常导致进程退出,你应该怎样去复现当时的异常现场?
- 日志中没有足够的信息帮助我们去准确定位线上问题?
- 如果我们能够把线上的异常现场保存下来,然后通过调试器去恢复当时的异常堆栈,我们可以看到这个异常的整条调用链路以及链路上的堆栈变量,就如同你在本地断点捕获到了这个异常一样。
安装方法
Python版本支持:>=3.7
pip install -i pydumpling
使用方法
在任何地方进行traceback
的保存
from pydumpling import dump_current_traceback from inspect import currentframe def inner(): a = 1 b = "2" dump_current_traceback("test.dump") c = str(a) + b def outer(): d = 4 inner()
在异常发生时进行异常堆栈的保存
在异常捕获的处理代码中使用save_dumpling()
. 如果不指定文件名,默认使用:${exception file}-${line number of the exception}.dump
.
from pydumpling import save_dumping def inner(): a = 1 b = "2" c = a + b def outer(): inner() if __name__ == "__main__": try: outer() except Exception: save_dumping("test.dump")
这样我们就得到了当时异常traceback
的dump文件
,通过debub_dumpling
即可对其进行pdb调试:
Python 3.10.6 (main, Aug 1 2022, 20:38:21) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from pydumpling import debug_dumpling >>> debug_dumpling("test.dump") > /home/loyd/vscodeFiles/pydumpling/test.py(6)inner() -> c = a + b (Pdb) list 1,17 1 from pydumpling import save_dumping 2 3 def inner(): 4 >> a = 1 5 b = "2" 6 -> c = a + b 7 8 9 def outer(): 10 inner() 11 12 13 if __name__ == "__main__": 14 try: 15 outer() 16 except Exception: 17 save_dumping("test.dump") (Pdb) ll 3 def inner(): 4 >> a = 1 5 b = "2" 6 -> c = a + b (Pdb) bt /home/loyd/vscodeFiles/pydumpling/test.py(15)<module>() -> outer() /home/loyd/vscodeFiles/pydumpling/test.py(10)outer() -> inner() > /home/loyd/vscodeFiles/pydumpling/test.py(6)inner() -> c = a + b (Pdb) pp a 1 (Pdb) pp b '2' (Pdb) u > /home/loyd/vscodeFiles/pydumpling/test.py(10)outer() -> inner() (Pdb) ll 9 def outer(): 10 -> inner() (Pdb)
命令行使用
使用命令行来打印traceback:
python -m pydumpling --print test.deump
将会输出:
Traceback (most recent call last): File "/workspaces/pydumpling/tests/test_dump.py", line 20, in test_dumpling outer() File "/workspaces/pydumpling/tests/test_dump.py", line 14, in outer inner() File "/workspaces/pydumpling/tests/test_dump.py", line 10, in inner c = a + b # noqa: F841 TypeError: unsupported operand type(s) for +: 'int' and 'str'
使用命令行来进行pdb调试:
python -m pydumpling --debug test.deump
将会打开pdb调试会话:
-> c = a + b (Pdb)
使用命令行来进行remote pdb调试
python -m pydumpling --rdebug test.deump
它会在机器的4444端口上打开pdb调试器,然后我们可以在另外一台机器上使用telnet、netcat来进行远程调试: nc 127.0.0.1 4444
开启全局异常捕获:
from pydumpling import catch_any_exception catch_any_exception() def inner(): a = 1 b = "2" c = a + b # noqa: F841 def outer(): inner() if __name__ == "__main__": outer()

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SOFABoot 4.3.0 发布,蚂蚁开源的基于 Springboot 的服务框架
SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot 提供了让用户可以在 Spring Boot 中非常方便地使用 SOFA 中间件的能力。 SOFABoot 4.3.0现已发布,具体更新内容包括: 新功能 支持 PolarisRegistryConfiguration#1291 在开始监控时添加 queueRemainingSize 日志#1293 在 sofa-boot-actuator-autoconigure 模型中添加 spring-boot-configuration-processor#1294 支持 sofa 线程池执行器#1301 支持 kubernetes registry 配置#1288 支持 mac M1(osx-aarch_64) 编译测试#1305 更新 Spring Boot 3.2.6#1326 优化 通过减少调用 Map.toArray() 来优化 getBi...
- 下一篇
JS 网页全自动翻译 v3.5 发布,增加法语德语俄语意大利语等网站的支持
两行 js 实现 html 全自动翻译。 无需改动页面、无语言配置文件、无 API Key、对 SEO 友好! 升级说明 translate.js 增加对本地语种为俄语、法语、德语、意大利语等的适配 translate.js 增加 translate.whole.enableAll(); 启用对页面中所有可翻译区域进行整体翻译的能力。等同于 translate.whole.tag.push(‘html’); 但性能会远高于它 translate.js 优化翻译时,如果当前语种就是需要显示的语种(也就是如果要切换的语种),那么也不会进行翻译 translate.js 增加 translate.refreshCurrentPage() 可以自定义页面刷新方式 translate.api 中增加 translate.tcdn.service.key 的配置,以针对分布式部署中不同的容器可分配不同key translate.service 开源翻译通道增加超时缓存拦截,避免超时造成请求时常过长使并发过多阻塞 Translate.api 去除对临时线程的创建。原本是当主翻译现成被占时会自动创建临...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境