How to step through Python code to help debug issues?

前端 未结 14 1048
梦如初夏
梦如初夏 2020-11-22 11:17

In Java/C# you can easily step through code to trace what might be going wrong, and IDE\'s make this process very user friendly.

Can you trace through python code in

14条回答
  •  孤独总比滥情好
    2020-11-22 11:30

    By using Python Interactive Debugger 'pdb'

    First step is to make the Python interpreter to enter into the debugging mode.

    A. From the Command Line

    Most straight forward way, running from command line, of python interpreter

    $ python -m pdb scriptName.py
    > .../pdb_script.py(7)()
    -> """
    (Pdb)
    

    B. Within the Interpreter

    While developing early versions of modules and to experiment it more iteratively.

    $ python
    Python 2.7 (r27:82508, Jul  3 2010, 21:12:11)
    [GCC 4.0.1 (Apple Inc. build 5493)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pdb_script
    >>> import pdb
    >>> pdb.run('pdb_script.MyObj(5).go()')
    > (1)()
    (Pdb)
    

    C. From Within Your Program

    For a big project and long-running module, can start the debugging from inside the program using import pdb and set_trace() like this :

    #!/usr/bin/env python
    # encoding: utf-8
    #
    
    import pdb
    
    class MyObj(object):
        count = 5
        def __init__(self):
            self.count= 9
    
        def go(self):
            for i in range(self.count):
                pdb.set_trace()
                print i
            return
    
    if __name__ == '__main__':
        MyObj(5).go()
    

    Step-by-Step debugging to go into more internal

    1. Execute the next statement… with “n” (next)

    2. Repeating the last debugging command… with ENTER

    3. Quitting it all… with “q” (quit)

    4. Printing the value of variables… with “p” (print)

      a) p a

    5. Turning off the (Pdb) prompt… with “c” (continue)

    6. Seeing where you are… with “l” (list)

    7. Stepping into subroutines… with “s” (step into)

    8. Continuing… but just to the end of the current subroutine… with “r” (return)

    9. Assign a new value

      a) !b = "B"

    10. Set a breakpoint

      a) break linenumber

      b) break functionname

      c) break filename:linenumber

    11. Temporary breakpoint

      a) tbreak linenumber

    12. Conditional breakpoint

      a) break linenumber, condition

    Note:**All these commands should be execute from **pdb

    For in-depth knowledge, refer:-

    https://pymotw.com/2/pdb/

    https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/

提交回复
热议问题