Python分析过程变量方法/Debug使用方法

过程变量分析

高手法:

自己去源代码中按图索骥,反向一步步找库函数的源代码涉及的return内容。

Jupyter:

Jupyter——实时显示变量是通过Nbextensions插件来实现,查程序运行后的变量数组在哪都有什么。

Jupyter Notebook查看变量值的方法_Triumph++的博客-CSDN博客

Pycharm:

一、手动显示错误类型

用pycharm调试程序,经常程序运行后既不报错,又出现一类奇怪的代码“Process finished with exit code -1073740791 (0xC0000409)”

解决方案:可以在pycharm中进行设置来将具体的错误显示出来,以供调试。点击Run; 选择Edit Configurations。找到Emulate terminal in output console选中,然后点击“apply”, 点击“ok”

重新运行相关程序,这时代码中具体的错误就会被显示出来,就可以具体问题具体分析了。

二、手动设置显示过程变量

Pycharm——不同于Jupyter只能看信息概要。而利用Pycharm,可以像matlab一样,在程序运行完成后,查看每个变量并继续对变量进行操作的方法,即勾选”Show command line afterwards(老版本pycharm)”或“run with Python console”(新版本pycharm)”/show variables

https://blog.csdn.net/qq_15969343/article/details/79895761

例如你想引用一个新的开源库,运行库的example后,利用该功能很容易从大量的变量名中找到我们需要的数组。然后再按照方法一,带着结果去找代码,效率翻倍。

三、逐步Debug

Debug

      bug 是臭虫的意思,debug 就是解决臭虫。debug 是通过工具来对代码进行调试,一步步找出程序中出现 bug 的位置,也就是程序中具体错误代码的位置。在 pycharm 中,右击代码部分就能够出现Debug模式。Debug模式的快捷任务图标,其说明如下:

step overF8快捷键):在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。在不存在子函数的情况下是和step into效果一样的。简单的说就是,程序代码越过子函数,但子函数会执行,且不进入。

step intoF7快捷键):在单步执行时,遇到子函数就进入并且继续单步执行,有的会跳到源代码里面去执行。

step into my codeAlt+Shift+F7快捷键):在单步执行时,遇到子函数就进入并且继续单步执行,不会进入到源码中。

step outShift+F8快捷键):假如进入了一个函数体中,你看了两行代码,不想看了,跳出当前函数体内,返回到调用此函数的地方,即使用此功能即可。

Resume program(F9快捷键)继续恢复程序,直接运行到下一断点处。

    以上四个功能,就是最常用的功能,一般操作步骤就是,设置好断点,debug运行,然后 F8 单步调试,遇到想进入的函数 F7 进去,想出来在 shift + F8,跳过不想看的地方,直接设置下一个断点,然后 F9 过去。

Pycharm查看某库文件函数的源码的方法:

将光标移动至要查看的方法处,按住ctrl 键,点击鼠标左键,即可查看该方法的源码

其他Debug的说法:

方法一:快速使用,由以下博客提供:https://blog.csdn.net/qq_45753718/article/details/122079032

1.首先在怀疑出错的代码处的前面设置断点

2.点击pycharm debug按钮

3.step over 也就是 F8 进行单击调试,只有光标在哪一行就是即将运行的代码 只有光标跳到下一行,这一行才会执行

4.运行到某一个自定义函数 def的时候如果想知道里面如何运行 单击 step into(F7) 然后继续step over

最后可能返回一个result 回到main函数继续step over。

5.如果是嵌套函数,函数里面还有别的自定义函数 可以运行到那一行时继续step into

6.如果想从嵌套函数出来 运行step out 相当于直接运行完了当前的整个内置的函数

7.step into就是无论函数是否是当前程序还是import进来的包 都要跳转过去(F7)。

step into my code 就是只跳进去我的代码,而忽略第三方库代码 。(Alt+shift+F7)

8.run to cursor 就是把光标放在哪里 就直接运行到哪里。
快捷键口诀:7进,8出,9跳。

9,F9是直接跳到下一个断点处。

一些调试的相关入门知识:ref《编写高质量代码改善python程序的91个建议》20231127

一、调试与定位——本质是复杂的搜索问题,必须通过大量分析才能接近真相;

很多时候调试要到底层,研究内部的数据或代码;

必须有丰富的知识,熟悉问题域各模块工作及写作方式。

除了使用调试器,一定要借助日志来帮助定位问题。logging是个方便的日志功能,可以将日记记录添加到代码中。通过查看日志输出,可以了解代码执行,并快速定位问题。

如果涉及到大量代码频繁操作,一定要使用快捷键,效率蹭蹭。

二、断点与调试

断点可以使能、不使能,或者条件使能。

三、查看变量的三种方式

3.1插入断点,Debug运行。在面板下就可看到变量,同时针对特定变量,右击add to watchers可以专门监控。

3.2 Eidt Configuration中勾选Run with Python console,Run后,点击控制台的“眼镜”图标,即可展开变量。

3.3 print打印方式。

四、CProfile库可记录执行时执行时间、函数调用次数等方式。导入import cProfile后,在代码中加入cProfile.run(“被测函数")即可获得代码运行信息。可以探测出该代码的性能瓶颈。

pyinstrument,py-spy:也是对Python代码性能分析。其中py-spy最快,cProfile最慢。

五、常见的Python典型问题与定位手法:

高耗时问题/函数调用栈过深/IO瓶颈/内存泄露/死锁类/正则回溯失控

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值