精华内容
下载资源
问答
  • 如何在 Python 中使用断点调试

    万次阅读 多人点赞 2018-10-18 22:11:59
    实际上没人能一次就写出完美的代码,除了我。但是世界上只有一个我。...一旦程序运行出现问题,便无从下手。而实际开发中,调试代码通常要花费比新编写代码更多的时间。所谓“行百里者半于九十”,这句...

    实际上没人能一次就写出完美的代码,除了我。但是世界上只有一个我。

    -- 林纳斯·托瓦兹(Linux 之父)

     

    既然不是神,写代码自然免不了要修改。修改代码的过程被称作调试,又叫 debug。

     

    刚接触编程的人,往往对调试代码没有很深的认识,觉得把功能做出来就完事了。一旦程序运行出现问题,便无从下手。而实际开发中,调试代码通常要花费比新编写代码更多的时间。所谓“行百里者半于九十”,这句话放在软件开发上一点不为过。你以为完成了 90% 开发工作的时候,剩下的工作可能还要花费差不多的时间。

     

    因此,选择合理的调试方法和工具,对于开发来说意义重大。

     

    在写 Python 代码的时候,我习惯的调试方法很简单,就是在程序里增加输出,以便了解程序的运行路径和变量的值。

     

    以下面这段代码为例:

     

    def twice(n):

        n *= 2

        return n

     

    a = input("a:")

    b = input("b:")

    if a > 3:

        b += 4

        if b > 5:

            c = a + twice(b)

        else:

            c = twice(a) + b

    else:

        b -= 2

        if b < 1:

            c = a - twice(b)

        else:

            c = twice(a) - b

    print c

     

    即使这样不长的一段代码,如果对于某些输入,最后输出的值和你的预期不一致,想要用肉眼从中看出到底哪里出了问题也并不是一目了然的事情。

     

    于是我会添加一些辅助的代码:

     

    def twice(n):

        n *= 2

        return n

     

    a = input("a:")

    b = input("b:")

    print "====a,b:", a, b 

    if a > 3:

        b += 4

        print "====1 b:", b

        if b > 5:

            c = a + twice(b)

            print "====1 c:", c

        else:

            c = twice(a) + b

            print "====2 c:", c

    else:

        b -= 2

        print "====2 b:", b

        if b < 1:

            c = a - twice(b)

            print "====3 c:", c

        else:

            c = twice(a) - b

            print "====4 c:", c

    print c

     

    运行后的效果:

     

    a:2

    b:4

    ====a,b: 2 4

    ====2 b: 2

    ====4 c: 2

    2

     

    通过添加类似的输出内容,就能比较清晰地了解程序的运行状态。

     

     

    不过,直接通过输出来调试,有时候会需要一点经验判断,决定在哪里输出什么数据。尤其当程序复杂之后,需要参考的数值会很多,全部都输出会很繁琐。

     

    一种更便捷更直观的方式就是使用断点调试。

     

    断点(break point)是指在代码中指定位置,当程序运行到此位置时变中断下来,并让开发者可查看此时各变量的值。因断点中断的程序并没有结束,可以选择继续执行。

     

    实现断点调试需要 IDE 的支持。下面以 PyCharm 来演示一下,仍然是前面的代码:

     

     

    在某一行代码的左侧栏点击,就可以在这行增加断点。现在在 3 个 if 判断的地方都加上断点。

     

    选择 debug,程序开始运行。

     

     

    输入 a、b 两个值之后,程序就在第一个 if 处中断,并且在工具栏中显示出当前程序中的各种数值。

     

     

    选择“resume program”,程序就会继续执行,直到遇到下一个断点。

     

     

    有了断点功能的帮助,调试的时候就方便许多,很容易观察程序运行时的状态。

     

     

    在断点调试时,还有个经常一起使用的功能就是单步调试。

     

     

    在程序中断时,选择“Step Over”,会向下执行一行代码后继续中断。

     

    当所处代码行中有函数时,“Step Into”会中断在函数内部,之后将在其中单步执行。对应的,“Step Out”将中断在执行完当前所在函数后的位置。

     

     

    这些操作在工具栏有快捷按钮,也可通过快捷键操作。

     

     

     

    “工欲善其事,必先利其器”。把上述调试工具熟悉之后,对你的开发效率将会有很大提升。

     

    当然,比调试工具更重要的,还是调试的思路。遇到错误时,读懂报错信息,分析出错原因,并逐步定位问题所在,而不是盲目地修改代码、无意义地重复运行,才是解决问题的关键。

     

    之后会继续跟大家分享调试代码的经验,这些经验都是一行行代码积累出来的。不过我的经验终究是我的经验,要把它变成你的经验,仍然需要经过一行行代码的磨练。

     

    没有捷径。

    展开全文
  • 调试和分析 这些库帮助您进行Python开发 调试器使您能够逐步执行代码 分析堆栈框架和设置断点等 并且分析器运行代码并提供详细的执行时间细分 从而识别程序中的瓶颈 27.1bdb 调试器框架 27.2faulthandler 转储Python...
  • 服务器下的python调试方法

    千次阅读 2017-07-07 23:15:56
    前言由于开发环境与服务器部署环境不一致,有时候总会遇到一些奇怪的问题,这是如果可以进行单步调试,对于解决问题将有极大帮助。安装方式调试方法单步调试python -m ipdb xxx.py 断点在需要打断点的地方加上下述...

    前言

    由于开发环境与服务器部署环境不一致,有时候总会遇到一些奇怪的问题,这是如果可以进行单步调试,对于解决问题将有极大帮助。

    安装方式

    调试方法

    单步调试

    python -m ipdb xxx.py
    

    断点

    在需要打断点的地方加上下述代码

    from ipdb import set_trace
    set_trace()
    

    运行到目标位置中断程序,出现提示符,进入ipython环境

    常用命令

    • n(下一步)
    • ENTER(重复上次命令)
    • c(继续)
    • s(进入子程序)
    • p 变量 (打印变量)
    • l(当前位置)
    • r(运行直到程序结束)
    • q(退出)
    展开全文
  • 不知道大家在用Python写代码出现报错时是怎样调试的,从报错提示定位回去一步一步check每一行?如果没有IDE或者命令行写代码时又该怎样快速调试?这时如果使用pdb进行调试将会异常方便。 Pdb就是Python debugger,是...
  • python 调试和性能分析

    2019-12-30 23:08:28
    代码调试的最简单的一个方法就是利用print()函数观察哪个地方打印出现问题,但这只适用于小型程序。因为你每次都得重新运行整个程序,或是一个完整的功能模块,才能看到打印出来的变量值。 而在其他情况下,我们...

    代码调试

    代码调试的最简单的一个方法就是利用print()函数观察哪个地方打印出现问题,但这只适用于小型程序。因为你每次都得重新运行整个程序,或是一个完整的功能模块,才能看到打印出来的变量值。
    而在其他情况下,我们可以使用如下几种方法
    1、断点调试
    在使用pycharm等编译器是,可以设置一个断点,然后再一行一行的运行来查找出问题所在
    2、使用pdb调试
    pdb调试也十分的简单,在代码中加入import pdb和pdb.set_trace()即可,当代码运行到pdb.set_trace()处时便会停止,这时我们在命令行中输入n为执行下一行,s为进入函数,l为查看上下文代码,p为打印,q为退出,更多操作可以通过python的源码来查看

    性能分析

    在日常工作中,我们可能会遇到这样的问题:产品的某个功能模块效率低下,延迟高,占用的资源多,但却不知道是哪里出了问题。
    这时我们便可以通过cProfile中的run来进行性能分析,比如我们对如下一个函数进行分析

    import cProfile
    
    def fac(n):
    	x = 0
    	fac = 1
    	while x<n:
    	    x+= 1
    	    fac*= x
    	return fac
    print(cProfile.run('fac(30)'))		
    

    如上所示,便能打印出相关参数,其中
    ncalls,是指相应代码 / 函数被调用的次数
    tottime,是指对应代码 / 函数总共执行所需要的时间(注意,并不包括它调用的其他代码 / 函数的执行时间)
    tottime percall,就是上述两者相除的结果,也就是tottime / ncalls
    cumtime,则是指对应代码 / 函数总共执行所需要的时间,这里包括了它调用的其他代码 / 函数的执行时间
    cumtime percall,则是 cumtime 和 ncalls 相除的平均结果。
    这里需要注意的是,run()中的函数必须加引号,不然就会出现TypeError: exec() arg 1 must be a string, bytes or code object这样的报错

    展开全文
  • linux 上 debug python 调试

    千次阅读 2019-05-27 16:00:56
    2、python 环境单点运行调试自己pyhon 调试步骤 首先你选择运行的 py 或服务程序的入口py python -m pdb test.py (Pdb) 会自动停在第一行,等待调试,这时你可以看看 帮助 (Pdb) h 说明下这几个关键 命令 断点设置 ...

    适用范围

    1、当启动某些服务出现异常时,且报错比较模糊时。问题找不到头脑
    调试脚本无疑是非常好的方式(cloudera 等)

    2、python 环境单点运行调试自己pyhon

    调试步骤

    首先你选择运行的 py 或服务程序的入口py

    python -m pdb test.py

    (Pdb) 会自动停在第一行,等待调试,这时你可以看看 帮助

    (Pdb) h

    说明下这几个关键 命令

    断点设置

    (Pdb)b 10 #断点设置在本py的第10行

    或(Pdb)b test.py:20 #断点设置到 ots.py第20行

    删除断点(Pdb)b #查看断点编号

    (Pdb)cl 2 #删除第2个断点

    运行

    (Pdb)n #单步运行

    (Pdb)s #细点运行 也就是会下到,方法(例子程序中的test()方法中执行)

    (Pdb)c #跳到下个断点

    查看

    (Pdb)p param #查看当前 变量值

    (Pdb)l #查看运行到某处代码

    (Pdb)a #查看全部栈内变量

    带参调试:

    python -m pdb makePackage youtuberev_1.0_csky.ipk

    常用命令说明:
    l #查看运行到哪行代码
    n #单步运行,跳过函数
    s #单步运行,可进入函数
    p 变量 #b值
    b 行号 #断点设置到第几行
    b #显示所有断点列表
    cl 断点号 #删除某个断点
    cl #删除所有断点
    c #跳到下一个断点
    r #return当前函数
    exit #退出
    更多的命令http://docs.python.org/library/pdb.html

    例子程序
    #-- coding: utf-8 --
    import datetime
    def test():
    for i in range(1,10):
    print("=====",i)
    print(datetime.datetime.now().strftime(’%Y-%m-%d %H:%M:%S’))
    return “success”

    if name == ‘main’:
    ret = test()
    print "return is ",ret

    展开全文
  • Python脚本的调试和分析

    千次阅读 2019-04-12 10:30:59
    本文摘自千锋教育编著的**《Python快乐编程》** 关注“千问千知”公众号,免费领取Python视频资料。 ... 调试和分析在Python开发中发挥重要作用 。...调试是一个解决代码中出现问题并阻止软件正常运行的过程。在P...
  • gdb调试python代码

    2020-03-31 10:40:12
    出现问题的时候,需要用到gdb来调试,方法如下 使用gdb打开python gdb python 在gdb中设置c语言的断点(如果第一次设置不成功,就先进行step3): b ice_flow_create 运行python脚本 r test.py ...
  • 调试卡死的Python进程

    万次阅读 2018-08-26 01:53:12
    有时线上程序运行过程中出现卡死(阻塞),无法通过断点或log找到问题,需通过其他方式调试。本文基于CentOS 7。 通用调试方法 查看进程号: ps auxf 查看此进程卡在哪个系统回调: strace -p pid pid替换为...
  • 使用PyCharm进行调试时,出现这个问题?那你是不是忘了什么。没错,你忘记设置断点了! ~ o(╯□╰)o ~
  • Pycharm是一款比较好的IDE,但最近使用其调试python代码的时候出现了标题中的问题,经过思考最终解决,希望可以帮助有相同问题的伙伴。 1、问题描述:当在pycharm中设置了断点后,点击debug会直接无视断点出现...
  • 出现在本书中的相当一部分Python代码实例借鉴或直接来源于一些优秀的开源安全项目,诸如Pedram Amini的Paimei,由此读者可以领略到安全研究者们是如何将黑客艺术与工程技术优雅融合来解决那些棘手问题的。...
  • 先对比数据,发现并不是所有的数据都出现问题,只有10%左右的数据有这个问题,说明应该不是逻辑上的问题,初步判断可能为个别情况需要特殊处理,考虑不周导致 检查梳理各个运算模块,用debug断点调试一波,
  • python——pycharm打断点debug入门

    万次阅读 2018-07-22 11:58:51
     断点调试是在开发过程中常用的功能,能清楚看到代码运行的过程,有利于代码问题跟踪。对我这个小白开发来说,还有一个作用是快速熟悉代码,拿到别人写的代码,有时看不太懂或看的很吃力,光这样看很无感,但是通过...
  • 出现在本书中的相当一部分Python代码实例借鉴或直接来源于一些优秀的开源安全项目,诸如Pedram Amini的Paimei,由此读者可以领略到安全研究者?是如何将黑客艺术与工程技术优雅融合来解决那些棘手问题的。  本书适合...
  • 多个except结构try...except...else结构try...except...fanally结构return语句和异常处理问题常见异常的解决with 上下文管理自定义异常类_raise抛出异常Pycharm开发环境的调试断点进入调试视图 异常的本质_调试核心...
  • 我在用pycharm做数据挖掘的时候,设置断点,debug想看看代码有没有问题,结果不管怎么点这个小虫子按钮都没法调试,一直出现pydev debugger: process xxxx is connecting这样的情况,以为等个一两分钟能解决,然并卵...
  • 使用VC++6.0调试C语言代码第一步:编译第二步:开始调试可能会出现问题 第一步:编译 C语言是一种编译型语言,所以我们在进行调试断点时,不像Python那样可以直接加断点,在VC++6.0中,刚刚写完的代码是无法直接...
  • pydev调试工具

    2014-02-11 11:28:25
    python自带的内置IDE越用越不爽,于是换了个开发工具eclipse+pydev。 强烈推荐大家在windows下用这款优秀的开源编辑器。...再按F11调试,就会出现如下窗口 调试时候,常用的快捷键 单步跳入 Step
  • 之前我写python项目都是直接run code,项目出现问题只能依靠报错信息。 当我发现debug功能后,我可以清晰地看到程序走到哪里了。 我有在网上找了几个debug的快捷键,记录在此。 调试 Debug 按 Press 功能...
  • pycharm的问题教程

    2019-04-12 19:59:57
    一、Pycharm运行结果不显示 file-setting-project interpreter 这里的问题是由于没有选择正确的路径,要正确选择python.exe安装的位置 ...三、断点调试 在行号和代码的中间点击出现一个红色的圆点,那个就是断点 ...
  • 问题现象:通过打断点,一步步调试可以正常复制和粘贴剪贴板数据。但是直接运行会报错pywintypes.error: (1418, 'GetClipboardData',线程没有打开的剪贴板)问题原因:原因是直接运行的话,没办法控制main线程的运行...
  • FPgrowth_DBLP.zip

    2019-12-13 12:43:29
    中国科学院大学数据挖掘作业,利用FP-growth的方法来对DBLP数据集进行挖掘。 资源中包含了处理好的100w条的DBLP数据,...里面有设置断点,如果更改文件路径出现问题,可以进行调试,或者评论区留言,希望帮助到大家!
  • 找bug找了三天,给我整抑郁了,一直觉得是自己的代码有问题,浏览器的F12调试找不出原因, 终端也没提示报错信息,加断点也没效果,最后一想是不是库的版本有问题,果然就是! 一搜索,发现一篇博客(博客地址)的博...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

python断点调试出现问题

python 订阅