pickle回溯支持。具有可调试的还原回溯。

keepTrace的Python项目详细描述


保持比赛

Build Status

此项目提供了pickle回溯对象的功能。 特别是包含足够的关于异常的详细信息,以便能够恢复 以后再调试回溯。

try:some_bad_code()exceptException:importsys,pickle,keepTracekeepTrace.init()# Can be initialized at any point before picklewithopen(some_path,"wb")asf:pickle.dump(sys.exc_info(),f)

...sometime later...

importpickle,pdb,tracebackwithopen(some_path,"rb")asf:exc=pickle.load(f)traceback.print_exception(*exc)pdb.post_mortem(exc[2])

保存pickle的位置和方式的详细信息将留给读者。 pickle过程的设计不需要此模块 解开追踪。

用法。一。2.三。4.

有四件事,只有一个功能需要了解才能启动和运行。

1)初始化

要能够pickle回溯,首先需要运行“init”函数。这随时可能发生 泡菜之前。如果你愿意的话,你甚至可以在启动时触发它。

importkeepTracekeepTrace.init()

2)酸洗器

如果您提供了一个pickler,它将使用它来确定对象是否可以由该pickler进行pickle。 一般来说,使用你计划稍后用的腌菜机来腌制回溯。IE:腌菜,云泡菜,莳萝。

如果pickler未能pickle对象,则该对象将被mock、stub或表示替换。

如果没有使用pickler(默认),则所有内容都将返回到回退模式。这意味着你可以不用 原始环境,但所有对象都将被mock和stub替换。

importkeepTrace,picklekeepTrace.init(pickler=pickle.dumps)

3)深度

深度控制pickle将到达的回溯范围之外的距离。例如:属性中的对象,对象中的类…等等…

pickle深度边缘的对象将被其表示替换。

使用浅深度(低数量)保持腌菜较轻。如果希望进一步记录和检查和/或希望拥有更真实的功能对象,请使用更高的深度(带有表示的pickle对象由于明显的原因将无法工作)。

将深度设置为-1将使深度无限。

importkeepTracekeepTrace.init(depth=5)

默认情况下,泡菜是非常保守的。一切都会被嘲笑和破坏。你只需要一个 取消勾选以查看和检查回溯,但您也将无法运行任何功能。

将depth设置为infinite,并使用重型pickler(dill)将导致非常详细且相互关联的调试。 但是,您需要能够提供与原始回溯相同的环境。

:: Warning ::

This is not a core dump. So do not expect everything to function as though it were a live session. There is danger in running what is essentially live production code, that is most likely broken in unknown ways, if you're in an environment where you could cause data corruption or loss. However, there is much to gain by keeping as many "live" objects as possible around. Most of the time you need to run that one harmless query function with a different argument, just to see if returns a correct value.

importkeepTrace,dillkeepTrace.init(pickler=dill.dumps,depth=-1)

4)包括来源

init还有最后一个参数。这将尝试在 串行化时刻。默认情况下,该选项处于活动状态,建议保持该状态。

但是,如果您有频繁的日志,那么在所有回溯中包含源代码可能会浪费大量空间。如果您可以访问调试的文件,并且可以合理地确保源代码不会更改,那么关闭此选项是有意义的。

importkeepTracekeepTrace.init(include_source=False)

保存泡菜时,可以做一些事情来显著缩小它的大小。GZIP和pickle工具。

importgzip,pickle,pickletoolswithgzip.open(filepath,"wb")asf:data=pickle.dumps(traceback)data=pickletools.optimize(data)f.write(data)

最后,来自pydump的原始消息。这个项目的灵感和最初的起源。仍然相关。

Why I wrote this?

I spent way too much time trying to discern details about bugs from logs that don't have enough information in them. Wouldn't it be nice to be able to open a debugger and load the entire stack of the crashed process into it and look around like you would if it crashed on your own machine?

Possible uses

This project (or approach) might be useful in multiprocessing environments running many unattended processes. The most common case for me is on production web servers that I can't really stop and debug. For each exception caught, I write a dump file and I can debug each issue on my own time, on my own box, even if I don't have the source, since the relevant source is stored in the dump file.


实用程序

你还在看书吗?令人惊叹的。吃点好吃的!!:)

实用程序。分析回溯

这是一个实用函数,可以帮助从python日志中检索回溯对象。

这些对象可以在回溯所在的任何地方使用,也可以调试,这对上下文有很大帮助。但是没有变量,所以检查是非常有限的。 例如:

fromtracebackimportprint_exceptionfromkeepTrace.utilsimportparse_tracebackswithopen(path_to_log)asf:forerrorinparse_tracebacks(f):print_exception(*error)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何从ImageIO中排除特定的TIFF读取器?   JavaJMockit和passbyreference。我们中一定有一个人错了(可能是我!)   java Android camera2放弃了牛轧糖的表面,但在棉花糖上工作   java按字符串中出现的顺序对字符数组进行排序   如何获取Groovy生成的java源代码   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java为什么我的冒泡排序代码会打印出这些奇怪的东西?   java JAXB:typesafeEnumMemberName=“generateName”是否可自定义?   Java编程输入:今天是星期天输出:星期天是今天   java不理解首个OOAD书的吉他示例   java如何从JformattedTextfield检索货币格式值   java可以从相同的源代码生成功能不同的可执行文件吗?