рдкреАрдбреАрдмреА - рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдбрд┐рдмрдЧрд░

рдкреАрдбреАрдмреА - рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдбрд┐рдмрдЧрд░



рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг: 1.4 рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг



pdb рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИред рдЗрд╕рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрдиреЗ, рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдореВрд▓реНрдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ, рд▓рд╛рдЗрди-рдмрд╛рдп-рд▓рд╛рдЗрди рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдвреВрдВрдвреЗрдВред



рдбрд┐рдмрдЧрд░ рд▓реЙрдиреНрдЪ


Pdb рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдЖрдкрдХреЛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рдпрд╣ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдХрдм рдФрд░ рдХреИрд╕реЗ рдбрд┐рдмрдЧрд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рд╢рд░реНрддреЛрдВ рдФрд░ рд╕рд╛рде рд╣реА рдбрд┐рдмрдЧрд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред



рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ


рдбрд┐рдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдП, рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓рдирд╛ рд╣реИред

# encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  1. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  2. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  3. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  4. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  5. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  6. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  7. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  8. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  9. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  10. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  11. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  12. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



  13. # encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .



# encoding: utf-8 # # Copyright (c) 2010 Doug Hellmann. All rights reserved. # class MyObj( object ): def __init__(self, num_loops): self.count = num_loops def go(self): for i in range(self.count): print i return if __name__ == '__main__' : MyObj(5).go() * This source code was highlighted with Source Code Highlighter .





рдЬрдм рдЖрдк рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдбреАрдмрдЧрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рд╕реНрд░реЛрдд рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рд╛рддрд╡реАрдВ рдкрдВрдХреНрддрд┐ рдкрд░ MyObj рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред



$ python -m pdb pdb_script.py

> .../pdb_script.py(7)<module>()

-> class MyObj(object):

(Pdb)







рдзреНрдпрд╛рди рджреЗрдВ:

рдЖрдорддреМрд░ рдкрд░ рдкреАрдбреАрдмреА рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкрде рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдбрд┐рдмрдЧрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ...



рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕реЗ


рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реЗрд╡ / рд░рди / рд░рд┐рдкреАрдЯ рдЪрдХреНрд░ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕рддреНрд░ рд╕реЗ рдбреАрдмрдЧрд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рди () рдпрд╛ рд░рдирд╡реИрд▓ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред



$ 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()')

> <string>(1)<module>()

(Pdb)








рдЪрд▓рд╛рдиреЗ рдХрд╛ рддрд░реНрдХ () рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбреАрдмрдЧрд░ рдЗрд╕реЗ рдкрд╣рд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдЖрдк рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ


рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рджреЛрдиреЛрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдереЗ рдХрд┐ рдЖрдк рдбрд┐рдмрдЧрд░ рдХреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдмрд╣реБрдд рдмрд╛рдж рдореЗрдВ рд╣реЛрддреА рд╣реИ, рд░рди рдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди, рд╕реЗрдЯ_рдЯреНрд░реЗрд╕ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рднреАрддрд░ рдбреАрдмрдЧрд░ рдХреЛ рдЪрд▓рд╛рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред

  1. #! / usr / bin / env рдЕрдЬрдЧрд░
  2. # рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: utf-8
  3. #
  4. # рдХреЙрдкреАрд░рд╛рдЗрдЯ (c) 2010 рдбрдЧ рд╣реЗрд▓рдореИрдиред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
  5. #
  6. рдЖрдпрд╛рдд pdb
  7. рд╡рд░реНрдЧ MyObj ( рдСрдмреНрдЬреЗрдХреНрдЯ ):
  8. def __init __ (рд╕реНрд╡рдпрдВ, num_loops):
  9. self.count = num_loops
  10. рдбрд┐рдл рдЧреЛ (рд╕реЗрд▓реНрдл):
  11. рдореИрдВ рд╕реАрдорд╛ рдореЗрдВ (self.count):
  12. pdb.set_trace ()
  13. рдкреНрд░рд┐рдВрдЯ рдХрд░реЛ
  14. рд╡рд╛рдкрд╕реА
  15. рдЕрдЧрд░ __name__ == '__main__' :
  16. MyObj (5) .go ()


рд▓рд╛рдЗрди 16 рдкрд░, рдЯреЗрд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд┐рдмрдЧрд░ рдХрд╣рд▓рд╛рддреА рд╣реИред



$ python ./pdb_set_trace.py

> .../pdb_set_trace.py(17)go()

-> print i

(Pdb)








set_trace () рдХреЗрд╡рд▓ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рднреА рд╕рдордп рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрдж рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реБрдП, рдпрд╛ рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╢рд╛рдЦрд╛ рдореЗрдВред



рдЕрд╕рдлрд▓рддрд╛ рдХреЗ рдмрд╛рдж


рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдбрд┐рдмрдЧ рдХрд░рдирд╛, рдкреЛрд╕реНрдЯрдорд╛рд░реНрдЯрдо рдбреАрдмрдЧрд┐рдВрдЧ рдХрд╣рд▓рд╛рддрд╛ рд╣реИред pdb pm () рдФрд░ post_mortem () рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

  1. #! / usr / bin / env рдЕрдЬрдЧрд░
  2. # рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: utf-8
  3. #
  4. # рдХреЙрдкреАрд░рд╛рдЗрдЯ (c) 2010 рдбрдЧ рд╣реЗрд▓рдореИрдиред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
  5. #
  6. рд╡рд░реНрдЧ MyObj ( рдСрдмреНрдЬреЗрдХреНрдЯ ):
  7. def __init __ (рд╕реНрд╡рдпрдВ, num_loops):
  8. self.count = num_loops
  9. рдбрд┐рдл рдЧреЛ (рд╕реЗрд▓реНрдл):
  10. рдореИрдВ рд╕реАрдорд╛ рдореЗрдВ (self.num_loops):
  11. рдкреНрд░рд┐рдВрдЯ рдХрд░реЛ
  12. рд╡рд╛рдкрд╕реА


рдпрд╣рд╛рдВ, рд▓рд╛рдЗрди 13 рдкрд░, рдПрдХ рдЕрдорд╛рдиреНрдп рдлрд╝реАрд▓реНрдб рдирд╛рдо рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЧреБрдг рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛, рдЗрд╕рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред pm () рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЯреНрд░реЗрд╕рдмреИрдХ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдореЗрдВ рдбреАрдмрдЧрд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдкрд╡рд╛рдж рд╣реБрдЖред



$ 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.

>>> from pdb_post_mortem import MyObj

>>> MyObj(5).go()

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

File "pdb_post_mortem.py", line 13, in go

for i in range(self.num_loops):

AttributeError: 'MyObj' object has no attribute 'num_loops'

>>> import pdb

>>> pdb.pm()

> .../pdb_post_mortem.py(13)go()

-> for i in range(self.num_loops):

(Pdb)








рдбрд┐рдмрдЧрд░ рдкреНрд░рдмрдВрдзрди


рдбреАрдмрдЧрд░ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдПрдХ рдЫреЛрдЯреА рдХрдорд╛рдВрдб рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЙрдмрд▓рддреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдЯреИрдХ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ, рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдбреАрдмрдЧрд░ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред рдбреАрдмрдЧрд░ рдХрдорд╛рдВрдб рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд░реАрдбрд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕реНрд░реЛрдд рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЦрд╛рд▓реА рд▓рд╛рдЗрди рджрд░реНрдЬ рдХрд░рдиреЗ рд╕реЗ рдкрд┐рдЫрд▓реА рдХрдорд╛рдВрдб рджреЛрд╣рд░рд╛рдИ рдЬрд╛рддреА рд╣реИред



рд╕реНрдЯреИрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ


рдбрд┐рдмрдЧрд░ рдХреЗ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рднреА рд╕рдордп, рдЖрдк рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╣рд╛рдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдк рдХреЙрд▓ рд╕реНрдЯреИрдХ рдореЗрдВ рдХрд╣рд╛рдВ рд╣реИрдВ (рдпрд╛ рд╕рд┐рд░реНрдл w ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, pdb_set_trace.py рдореЙрдбреНрдпреВрд▓ рд▓рд╛рдЗрди 17 рдЧреЛ () рд╡рд┐рдзрд┐ рдореЗрдВред



$ python pdb_set_trace.py

> .../pdb_set_trace.py(17)go()

-> print i

(Pdb) where

.../pdb_set_trace.py(21)<module>()

-> MyObj(5).go()

> .../pdb_set_trace.py(17)go()

-> print i








рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА ( рдПрд▓ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред



(Pdb) list

12 self.count = num_loops

13

14 def go(self):

15 for i in range(self.count):

16 pdb.set_trace()

17 -> print i

18 return

19

20 if __name__ == '__main__':

21 MyObj(5).go()

[EOF]

(Pdb)








рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, 11 рд▓рд╛рдЗрдиреЗрдВ рд╡рд░реНрддрдорд╛рди рдПрдХ (5 рдКрдкрд░ рдФрд░ 5 рдиреАрдЪреЗ) рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИрдВред рдЬрдм рд╕реВрдЪреА рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдХреЗ рдмрдЬрд╛рдп рджрд┐рдП рдЧрдП рдПрдХ рд╕реЗ рд╕рдЯреЗ рд╣реБрдП 11 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред



(Pdb) list 14

9 class MyObj(object):

10

11 def __init__(self, num_loops):

12 self.count = num_loops

13

14 def go(self):

15 for i in range(self.count):

16 pdb.set_trace()

17 -> print i

18 return

19








рдпрджрд┐ рдЖрдк рджреЛ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реА рдФрд░ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



(Pdb) list 5, 19

5 #

6

7 import pdb

8

9 class MyObj(object):

10

11 def __init__(self, num_loops):

12 self.count = num_loops

13

14 def go(self):

15 for i in range(self.count):

16 pdb.set_trace()

17 -> print i

18 return

19








рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВред рд╕реНрдЯреИрдХ рдкрд░ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ (рдЫреЛрдЯрд╛ рдпреВ ) рдЪрд▓рддрд╛ рд╣реИред рдиреАрдЪреЗ (рдпрд╛ рдбреА ) рдЧрд╣рд░реА рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЛ рд╡рд╣рди рдХрд░рддрд╛ рд╣реИред



(Pdb) up

> .../pdb_set_trace.py(21)<module>()

-> MyObj(5).go()



(Pdb) down

> .../pdb_set_trace.py(17)go()

-> print i








рдЬрдм рднреА рдЖрдк рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рдбрд┐рдмрдЧрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХреЛ рдЙрд╕реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкрд░ред



рд╕реНрдЯреИрдХ рдкрд░ рдЪрд░ рджреЗрдЦреЗрдВ


рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╕реНрдЯреИрдХ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдорд╛рди рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред рдкреАрдбреАрдмреА рдЗрди рдЪрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

  1. #! / usr / bin / env рдЕрдЬрдЧрд░
  2. # рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: utf-8
  3. #
  4. # рдХреЙрдкреАрд░рд╛рдЗрдЯ (c) 2010 рдбрдЧ рд╣реЗрд▓рдореИрдиред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
  5. #
  6. рдЖрдпрд╛рдд pdb
  7. def рдкреБрдирд░рд╛рд╡рд░реНрддреА_рдлрдВрдХреНрд╢рди (n = 5, рдЖрдЙрдЯрдкреБрдЯ = 'рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ' ):
  8. рдпрджрд┐ n> 0:
  9. recursive_function (n-1)
  10. рдФрд░ :
  11. pdb.set_trace ()
  12. рдкреНрд░рд┐рдВрдЯ рдЖрдЙрдЯрдкреБрдЯ
  13. рд╡рд╛рдкрд╕реА
  14. рдЕрдЧрд░ __name__ == '__main__' :
  15. recursive_function ()




рдЖрд░реНрдЧреНрд╕ рдХрдорд╛рдВрдб (рдЙрд░реНрдл a ) рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдлреНрд░реЗрдо рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд╣реИред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЧрд╣рд░реЗ рд╕реНрдЯреИрдХ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред



$ python pdb_function_arguments.py

> .../pdb_function_arguments.py(14)recursive_function()

-> return

(Pdb) where

.../pdb_function_arguments.py(17)<module>()

-> recursive_function()

.../pdb_function_arguments.py(11)recursive_function()

-> recursive_function(n-1)

.../pdb_function_arguments.py(11)recursive_function()

-> recursive_function(n-1)

.../pdb_function_arguments.py(11)recursive_function()

-> recursive_function(n-1)

.../pdb_function_arguments.py(11)recursive_function()

-> recursive_function(n-1)

.../pdb_function_arguments.py(11)recursive_function()

-> recursive_function(n-1)

> .../pdb_function_arguments.py(14)recursive_function()

-> return



(Pdb) args

n = 0

output = to be printed



(Pdb) up

> .../pdb_function_arguments.py(11)recursive_function()

-> recursive_function(n-1)



(Pdb) args

n = 1

output = to be printed



(Pdb)








рдкреА рдХрдорд╛рдВрдб рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдкреНрд░рд┐рдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрдЬрд╛рдп, рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдЬрд╛рддрд╛ рд╣реИред



(Pdb) pn

1



(Pdb) print n

1








рдЗрд╕реА рддрд░рд╣, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд ! рдЖрдк рддреБрд░рдВрдд рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рднреЗрдЬреЗрдВред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдЪрд░ рд╕рд╣рд┐рдд рдордирдорд╛рдиреЗ рдкрд╛рдЗрдерди рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдбрд┐рдмрдЧрд░ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓реА рдХреЙрд▓, set_trace () рдХреЗ рдмрд╛рдж, рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдореВрд▓реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред



$ python pdb_function_arguments.py

> .../pdb_function_arguments.py(14)recursive_function()

-> print output



(Pdb) !output

'to be printed'



(Pdb) !output='changed value'



(Pdb) continue

changed value








рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдпрд╛ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛, "рд╕реБрдВрджрд░" рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдкреАрдкреА (рд╕реБрдВрджрд░ рдкреНрд░рд┐рдВрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрд╛рда рдХреА рдХрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИред

  1. #! / usr / bin / env рдЕрдЬрдЧрд░
  2. # рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: utf-8
  3. #
  4. # рдХреЙрдкреАрд░рд╛рдЗрдЯ (c) 2010 рдбрдЧ рд╣реЗрд▓рдореИрдиред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
  5. #
  6. рдЖрдпрд╛рдд pdb
  7. рдЦреБрд▓реЗ ( 'lorem.txt' , 'rt' ) рдХреЗ рд░реВрдк рдореЗрдВ f:
  8. рд▓рд╛рдЗрдиреЗрдВ = f.readlines ()
  9. pdb.set_trace ()


рдкреА рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕реЗ рдЕрд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреАрдкреА рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pprint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред



$ python pdb_pp.py

--Return--

> .../pdb_pp.py(12)<module>()->None

-> pdb.set_trace()

(Pdb) p lines

['Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec\n', 'egestas, enim

et consectetuer ullamcorper, lectus ligula rutrum leo, a\n', 'elementum elit tortor

eu quam.\n']



(Pdb) pp lines

['Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec\n',

'egestas, enim et consectetuer ullamcorper, lectus ligula rutrum leo, a\n',

'elementum elit tortor eu quam.\n']



(Pdb)








рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрджрдо


рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рджреМрд░рд╛рди рд╕реНрдЯреИрдХ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЙрди рдЪрд░рдгреЛрдВ рдореЗрдВ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕реЗ рдбрд┐рдмрдЧрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

  1. #! / usr / bin / env рдЕрдЬрдЧрд░
  2. # рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: utf-8
  3. #
  4. # рдХреЙрдкреАрд░рд╛рдЗрдЯ (c) 2010 рдбрдЧ рд╣реЗрд▓рдореИрдиред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
  5. #
  6. рдЖрдпрд╛рдд pdb
  7. рдбреА рдПрдл (рдПрди):
  8. i for рд░реЗрдВрдЬ (n):
  9. j = i * n
  10. рдкреНрд░рд┐рдВрдЯ рдЖрдИ, рдЬреЗ
  11. рд╡рд╛рдкрд╕реА
  12. рдЕрдЧрд░ __name__ == '__main__' :
  13. pdb.set_trace ()
  14. рдЪ (5)


рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЕрдЧрд▓реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрд┐рдВрджреБ рд╕реЗ рдкрд╣рд▓реЗ рд░реЛрдХреЗрдВ - рдпрд╛ рддреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╣рд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, рдпрд╛ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ред



$ python pdb_step.py

> /Users/dhellmann/Documents/PyMOTW/src.pdb/PyMOTW/pdb/pdb_step.py(17)<module>()

-> f(5)








рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ рд╕реЗрдЯ_рдЯреНрд░реЗрд╕ () рдХрд╣рдХрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдбрд┐рдмрдЧрд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдХреЙрд▓ рдЯреВ рд╕реНрдЯреЗрдк рдХреЙрд▓ f ()ред



(Pdb) step

--Call--

> .../pdb_step.py(9)f()

-> def f(n):








рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдЪрд░рдг, рдФрд░ f () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдмрди рдЬрд╛рддреА рд╣реИ рдФрд░ рд▓реВрдк рдЪрд▓рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред



(Pdb) step

> .../pdb_step.py(10)f()

-> for i in range(n):








рдлрд┐рд░ рд╕реЗ рдХрджрдо рд░рдЦрдиреЗ рдкрд░, рд╣рдо рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ j рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред



(Pdb) step

> /Users/dhellmann/Documents/PyMOTW/src.pdb/PyMOTW/pdb/pdb_step.py(11)f()

-> j = i * n

(Pdb) pi

0








I рдХрд╛ рдорд╛рди 0 рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдЪрд░рдг рдХреЗ рдмрд╛рдж j рдХрд╛ рдорд╛рди рднреА 0 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред



(Pdb) step

> /Users/dhellmann/Documents/PyMOTW/src.pdb/PyMOTW/pdb/pdb_step.py(12)f()

-> print i, j



(Pdb) pj

0



(Pdb)








рдпрджрд┐ рдЖрдкрдХреЛ рдмрд╛рд░-рдмрд╛рд░ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд╛рд░-рдмрд╛рд░ рдЪрд▓рдирд╛ рдердХрд╛рдК рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

  1. #! / usr / bin / env рдЕрдЬрдЧрд░
  2. # рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: utf-8
  3. #
  4. # рдХреЙрдкреАрд░рд╛рдЗрдЯ (c) 2010 рдбрдЧ рд╣реЗрд▓рдореИрдиред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
  5. #
  6. рдЖрдпрд╛рдд pdb
  7. рдбреАрдИрдПрдлрд╝ рдХреИрд▓реНрдХ (i, n):
  8. j = i * n
  9. рд╡рд╛рдкрд╕ рдЬ
  10. рдбреА рдПрдл (рдПрди):
  11. i for рд░реЗрдВрдЬ (n):
  12. j = calc (i, n)
  13. рдкреНрд░рд┐рдВрдЯ рдЖрдИ, рдЬреЗ
  14. рд╡рд╛рдкрд╕реА
  15. рдЕрдЧрд░ __name__ == '__main__' :
  16. pdb.set_trace ()
  17. рдЪ (5)


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреИрд▓реНрдХ () рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, рд╣рд░ рдмрд╛рд░ рдЗрд╕реЗ f () рдореЗрдВ рд▓реВрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧреА рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджрдмрд╛рддрд╛ рд╣реИ, рд╕рднреА рдХреИрд▓реНрдХ () рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред



$ python pdb_next.py

> .../pdb_next.py(21)<module>()

-> f(5)

(Pdb) step

--Call--

> .../pdb_next.py(13)f()

-> def f(n):



(Pdb) step

> .../pdb_next.py(14)f()

-> for i in range(n):



(Pdb) step

> .../pdb_next.py(15)f()

-> j = calc(i, n)



(Pdb) step

--Call--

> .../pdb_next.py(9)calc()

-> def calc(i, n):



(Pdb) step

> .../pdb_next.py(10)calc()

-> j = i * n



(Pdb) step

> .../pdb_next.py(11)calc()

-> return j



(Pdb) step

--Return--

> .../pdb_next.py(11)calc()->0

-> return j



(Pdb) step

> .../pdb_next.py(16)f()

-> print i, j



(Pdb) step

0 0








рдЕрдЧрд▓рд╛ рдХрдорд╛рдВрдб рдЪрд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбрд┐рдмрдЧрд░ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреА рдЕрдЧрд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред



> .../pdb_next.py(14)f()

-> for i in range(n):

(Pdb) step

> .../pdb_next.py(15)f()

-> j = calc(i, n)



(Pdb) next

> .../pdb_next.py(16)f()

-> print i, j



(Pdb)








рдпреВ рдПрдирдЯреАрдЖрдИрдПрд▓ рдХрдорд╛рдВрдб рдЕрдЧрд▓реЗ рдХреА рддрд░рд╣ рд╣реИ, рдХреЗрд╡рд▓ рдпрд╣ рддрдм рддрдХ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдирд┐рдореНрди рд╕реНрдерд┐рдд рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрдВрдХреНрддрд┐ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ (рд╡рд░реНрддрдорд╛рди рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рддрдХ рдХрд┐ рдЫреЛрд░реЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



$ python pdb_next.py

> .../pdb_next.py(21)<module>()

-> f(5)

(Pdb) step

--Call--

> .../pdb_next.py(13)f()

-> def f(n):



(Pdb) step

> .../pdb_next.py(14)f()

-> for i in range(n):



(Pdb) step

> .../pdb_next.py(15)f()

-> j = calc(i, n)



(Pdb) next

> .../pdb_next.py(16)f()

-> print i, j



(Pdb) until

0 0

1 5

2 10

3 15

4 20

> .../pdb_next.py(17)f()

-> return



(Pdb)








рдЬрдм рддрдХ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╡рд░реНрддрдорд╛рди рд░реЗрдЦрд╛ 16 рдереА - рд▓реВрдк рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ред рдЬрдм рддрдХ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рд╖реНрдкрд╛рджрди 17 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рдФрд░ рдЪрдХреНрд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ред



рд╡рд╛рдкрд╕реА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рд╕рдордп рддрдХ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ рдЬрдм рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╡рд╛рдкрд╕реА рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рджреЗрддрд╛ рд╣реИред



$ python pdb_next.py

> .../pdb_next.py(21)<module>()

-> f(5)

(Pdb) step

--Call--

> .../pdb_next.py(13)f()

-> def f(n):



(Pdb) step

> .../pdb_next.py(14)f()

-> for i in range(n):



(Pdb) return

0 0

1 5

2 10

3 15

4 20

--Return--

> .../pdb_next.py(17)f()->None

-> return



(Pdb)








рд░реЛрдХ рдмрд┐рдВрджреБ


рдЬрдм рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рднреА рдмрдбрд╝реЗ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддрдм рднреА рдЬрдм рддрдХ рдХрд┐ рдЕрдЧрд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдзреАрдорд╛ рдФрд░ рдЙрдмрд╛рдК рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрджрдо рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ - рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрд╕ рдХреНрд╖рдг рддрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдпрд╣ рдЙрд╕ рдмрд┐рдВрджреБ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк рдбрд┐рдмрдЧрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП set_trace () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдорд╛рдзрд╛рди рдбрд┐рдмрдЧрд░ рдореЗрдВ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдмрддрд╛рдПрдВ рдХрд┐ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╣рд╛рдВ рд░реЛрдХрдирд╛ рд╣реИред рдбреАрдмрдЧрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдпрд╣ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдЬрдЧрд╣ рдкрд░ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрдХреЗрддрд┐рдд рд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рдордиреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИред

  1. #! / usr / bin / env рдЕрдЬрдЧрд░
  2. # рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: utf-8
  3. #
  4. # рдХреЙрдкреАрд░рд╛рдЗрдЯ (c) 2010 рдбрдЧ рд╣реЗрд▓рдореИрдиред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
  5. #
  6. рдбреАрдИрдПрдлрд╝ рдХреИрд▓реНрдХ (i, n):
  7. j = i * n
  8. рдкреНрд░рд┐рдВрдЯ 'рдЬреЗ =' , рдЬреЗ
  9. рдЕрдЧрд░ j> 0:
  10. рдкреНрд░рд┐рдВрдЯ 'рд╕рдХрд╛рд░рд╛рддреНрдордХ!'
  11. рд╡рд╛рдкрд╕ рдЬ
  12. рдбреА рдПрдл (рдПрди):
  13. i for рд░реЗрдВрдЬ (n):
  14. рдкреНрд░рд┐рдВрдЯ 'i =' , i
  15. j = calc (i, n)
  16. рд╡рд╛рдкрд╕реА
  17. рдЕрдЧрд░ __name__ == '__main__' :
  18. рдЪ (5)


рдмреНрд░реЗрдХ рдХрдорд╛рдВрдб рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛, рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдирд┐рд╖реНрдкрд╛рджрди рдмрдВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреНрд░реЗрдХ рд▓рд┐рдиреЛрдиреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) break 11

Breakpoint 1 at .../pdb_break.py:11



(Pdb) continue

i = 0

j = 0

i = 1

j = 5

> .../pdb_break.py(11)calc()

-> print 'Positive!'



(Pdb)






рдЬрд╛рд░реА рдЖрджреЗрд╢ рдбрд┐рдмрдЧрд░ рдХреЛ рдЕрдЧрд▓реЗ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рддрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪ рдореЗрдВ рд▓реВрдк рдХрд╛ рдкрд╣рд▓рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ () рдкрд╛рд╕ рд╣реЛрдЧрд╛, рдФрд░ рджреВрд╕рд░реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдХреИрд▓реНрдХ () рдореЗрдВ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред



рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдкрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреЗ рдмрдЬрд╛рдп рдЙрд╕рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдХреИрд▓реНрдХ () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) break calc

Breakpoint 1 at .../pdb_break.py:7



(Pdb) continue

i = 0

> .../pdb_break.py(8)calc()

-> j = i * n



(Pdb) where

.../pdb_break.py(21)<module>()

-> f(5)

.../pdb_break.py(17)f()

-> j = calc(i, n)

> .../pdb_break.py(8)calc()

-> j = i * n



(Pdb)








рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдирдВрдмрд░ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рд╕реЗ рдкрд╣рд▓реЗред

  1. #! / usr / bin / env рдЕрдЬрдЧрд░
  2. # рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: utf-8
  3. #
  4. # рдХреЙрдкреАрд░рд╛рдЗрдЯ (c) 2010 рдбрдЧ рд╣реЗрд▓рдореИрдиред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
  5. #
  6. pdb_break рд╕реЗ рдЖрдпрд╛рдд f
  7. рдЪ (5)


рдпрд╣рд╛рдВ рд╣рдо рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо pdb_break_remote.py рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж pdb_break.py рдХреА 11 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдкрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред



$ python -m pdb pdb_break_remote.py

> .../pdb_break_remote.py(7)<module>()

-> from pdb_break import f

(Pdb) break pdb_break.py:11

Breakpoint 1 at .../pdb_break.py:11



(Pdb) continue

i = 0

j = 0

i = 1

j = 5

> .../pdb_break.py(11)calc()

-> print 'Positive!'



(Pdb)








рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╕реНрд░реЛрдд рдХрд╛ рдкреВрд░реНрдг рдкрде рдпрд╛ sys.path рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рд╣реЛ рд╕рдХрддрд╛ рд╣реИред



рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ рдмреНрд░реЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреА рд▓рд╛рдЗрди рд╕рдВрдЦреНрдпрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдпрд╣ рдХрд┐рддрдиреА рдмрд╛рд░ рд╣рд┐рдЯ рд╣реБрдИ, рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) break 11

Breakpoint 1 at .../pdb_break.py:11



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:11



(Pdb) continue

i = 0

j = 0

i = 1

j = 5

> .../pdb/pdb_break.py(11)calc()

-> print 'Positive!'



(Pdb) continue

Positive!

i = 2

j = 10

> .../pdb_break.py(11)calc()

-> print 'Positive!'



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:11

breakpoint already hit 2 times



(Pdb)








рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдкреНрд░рдмрдВрдзрди


рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝рд╛ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рдЗрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ, рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдЕрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдбрд┐рдмрдЧрд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд▓рд╛рдЗрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ рд░реЛрдХрдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмреНрд░реЗрдХрдкрд╛рдЗрдВрдЯ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) break calc

Breakpoint 1 at .../pdb_break.py:7



(Pdb) break 11

Breakpoint 2 at .../pdb_break.py:11



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:7

2 breakpoint keep yes at .../pdb_break.py:11



(Pdb) disable 1



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep no at .../pdb_break.py:7

2 breakpoint keep yes at .../pdb_break.py:11



(Pdb) continue

i = 0

j = 0

i = 1

j = 5

> .../pdb_break.py(11)calc()

-> print 'Positive!'



(Pdb)








рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдбреАрдмрдЧрд┐рдВрдЧ рд╕рддреНрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рджреЛ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рддрдм рддрдХ рдЪрд▓рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╢реЗрд╖ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдПрдХ рдФрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИред



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) break calc

Breakpoint 1 at .../pdb_break.py:7



(Pdb) break 16

Breakpoint 2 at .../pdb_break.py:16



(Pdb) disable 1



(Pdb) continue

> .../pdb_break.py(16)f()

-> print 'i =', i



(Pdb) list

11 print 'Positive!'

12 return j

13

14 def f(n):

15 for i in range(n):

16 B-> print 'i =', i

17 j = calc(i, n)

18 return

19

20 if __name__ == '__main__':

21 f(5)



(Pdb) continue

i = 0

j = 0

> .../pdb_break.py(16)f()

-> print 'i =', i



(Pdb) list

11 print 'Positive!'

12 return j

13

14 def f(n):

15 for i in range(n):

16 B-> print 'i =', i

17 j = calc(i, n)

18 return

19

20 if __name__ == '__main__':

21 f(5)



(Pdb) pi

1



(Pdb) enable 1



(Pdb) continue

i = 1

> .../pdb_break.py(8)calc()

-> j = i * n



(Pdb) list

3 #

4 # Copyright (c) 2010 Doug Hellmann. All rights reserved.

5 #

6

7 B def calc(i, n):

8 -> j = i * n

9 print 'j =', j

10 if j > 0:

11 print 'Positive!'

12 return j

13



(Pdb)








рд╕реВрдЪреА рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ B рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреА рд▓рд╛рдЗрдиреЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЙрди рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддреА рд╣реИрдВ рдЬрд╣рд╛рдВ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ (рд▓рд╛рдЗрдиреЗрдВ 9 рдФрд░ 18)ред



рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) break calc

Breakpoint 1 at .../pdb_break.py:7



(Pdb) break 11

Breakpoint 2 at .../pdb_break.py:11



(Pdb) break 16

Breakpoint 3 at .../pdb_break.py:16



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:7

2 breakpoint keep yes at .../pdb_break.py:11

3 breakpoint keep yes at .../pdb_break.py:16



(Pdb) clear 2

Deleted breakpoint 2



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:7

3 breakpoint keep yes at .../pdb_break.py:16



(Pdb)








рд╢реЗрд╖ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдЙрдирдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдП рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗред



рдЕрд╕реНрдерд╛рдпреА рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ


рдкрд╣рд▓реА рд╣рд┐рдЯ рдХреЗ рдмрд╛рдж рдЕрд╕реНрдерд╛рдпреА рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдлрд╝ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкрд╛рд░рдВрдкрд░рд┐рдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдВрджреБ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреБрд░рдВрдд рд╕рд╛рдл рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) tbreak 11

Breakpoint 1 at .../pdb_break.py:11



(Pdb) continue

i = 0

j = 0

i = 1

j = 5

Deleted breakpoint 1

> .../pdb_break.py(11)calc()

-> print 'Positive!'



(Pdb) break



(Pdb) continue

Positive!

i = 2

j = 10

Positive!

i = 3

j = 15

Positive!

i = 4

j = 20

Positive!

The program finished and will be restarted

> .../pdb_break.py(7)<module>()

-> def calc(i, n):



(Pdb)








рдирд┐рд╖реНрдкрд╛рджрди рдкрд╣рд▓реА рдмрд╛рд░ 11 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдВрдд рддрдХ рдиреЙрди-рд╕реНрдЯреЙрдк рдЪрд▓рддрд╛ рд╣реИред



рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ


рдирд┐рдпрдо рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдкрд░ рднреА рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗрд╡рд▓ рддрднреА рдмрдВрдж рд╣реЛ рдЬрд╛рдП рдЬрдм рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдкреВрд░реА рд╣реЛ рдЬрд╛рдПрдВред рд╕рд╢рд░реНрдд рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЛ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реВрдХреНрд╖реНрдо рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдЯреЙрдк рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред



рд╕рд╢рд░реНрдд рд╡рд┐рд░рд╛рдо рдмрд┐рдВрджреБ рджреЛ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдмреНрд░реЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд╕рдордп рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реИред



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) break 9, j>0

Breakpoint 1 at .../pdb_break.py:9



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:9

stop only if j>0



(Pdb) continue

i = 0

j = 0

i = 1

> .../pdb_break.py(9)calc()

-> print 'j =', j



(Pdb)








рд╕реНрдерд┐рддрд┐ рддрд░реНрдХ рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЗ рдлреНрд░реЗрдо рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдмреНрд░реЗрдХрдкрд╛рдЗрдВрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рд╣реА рдорд╛рди рдкрд░ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдкрд░ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред



рдХрд┐рд╕реА рд╢рд░реНрдд рдХреЛ рдореМрдЬреВрджрд╛ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрд░реНрдХ - рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдЖрдИрдбреА рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) break 9

Breakpoint 1 at .../pdb_break.py:9



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:9



(Pdb) condition 1 j>0



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:9

stop only if j>0



(Pdb)








рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯреНрд╕ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рдирд╛


рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪрдХреНрд░ рдпрд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдХреНрд╕рд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдФрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдХреБрдЫ рдЪрд░рдгреЛрдВ рдХреЛ "рд╕реНрдХреНрд░реЙрд▓" рджреНрд╡рд╛рд░рд╛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рдЕрдирджреЗрдЦрд╛ рдХрдорд╛рдВрдб рдбрд┐рдмрдЧрд░ рдХреЛ рдХреБрдЫ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдирджреЗрдЦрд╛ рдХрд╛рдЙрдВрдЯрд░ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдпрд╣ 0 рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) break 17

Breakpoint 1 at .../pdb_break.py:17



(Pdb) continue

i = 0

> .../pdb_break.py(17)f()

-> j = calc(i, n)



(Pdb) next

j = 0

> .../pdb_break.py(15)f()

-> for i in range(n):



(Pdb) ignore 1 2

Will ignore next 2 crossings of breakpoint 1.



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:17

ignore next 2 hits

breakpoint already hit 1 time



(Pdb) continue

i = 1

j = 5

Positive!

i = 2

j = 10

Positive!

i = 3

> .../pdb_break.py(17)f()

-> j = calc(i, n)



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:17

breakpoint already hit 4 times








рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рддреБрд░рдВрдд рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) break 17

Breakpoint 1 at .../pdb_break.py:17



(Pdb) ignore 1 2

Will ignore next 2 crossings of breakpoint 1.



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:17

ignore next 2 hits



(Pdb) ignore 1 0

Will stop next time breakpoint 1 is reached.



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_break.py:17








рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╢реБрд░реВ рдХрд░рдирд╛


рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдореЛрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреАрдбреАрдмреА рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкрд╛рдпрдерди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рд╣рд┐рдд рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЬрдм рд╡реЗ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдорд╛рд░рддреЗ рд╣реИрдВ рддреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓рд╛рдЗрди рддрд░реНрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбрд┐рдмрдЧрд░ рдкреНрд░реЙрдореНрдкреНрдЯ (рдХреЙрдо) рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрдд рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдВ рдФрд░ рдбреАрдмрдЧрд░ рдореБрдЦреНрдп рдореЛрдб рдкрд░ рд▓реМрдЯреЗрдВред



$ python -m pdb pdb_break.py

> .../pdb_break.py(7)<module>()

-> def calc(i, n):

(Pdb) break 9

Breakpoint 1 at .../pdb_break.py:9



(Pdb) commands 1

(com) print 'debug i =', i

(com) print 'debug j =', j

(com) print 'debug n =', n

(com) end



(Pdb) continue

i = 0

debug i = 0

debug j = 0

debug n = 5

> .../pdb_break.py(9)calc()

-> print 'j =', j



(Pdb) continue

j = 0

i = 1

debug i = 1

debug j = 5

debug n = 5

> .../pdb_break.py(9)calc()

-> print 'j =', j



(Pdb)








рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ рдХрдИ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ, рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рднреА рдорд╛рдиреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рдкреНрд░рдЧрддрд┐ рдирд┐рдпрдВрддреНрд░рдг


рдЬрдВрдк рдХрдорд╛рдВрдб рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдордХреНрдЦреА рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдХреБрдЫ рдХреЛрдб, рдпрд╛ рдкрд┐рдЫрдбрд╝реЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реВрдЪреА рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдоред

  1. #! / usr / bin / env рдЕрдЬрдЧрд░
  2. # рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: utf-8
  3. #
  4. # рдХреЙрдкреАрд░рд╛рдЗрдЯ (c) 2010 рдбрдЧ рд╣реЗрд▓рдореИрдиред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
  5. #
  6. рдбреА рдПрдл (рдПрди):
  7. рдкрд░рд┐рдгрд╛рдо = []
  8. рдЬ = реж
  9. i for рд░реЗрдВрдЬ (n):
  10. j = i * n + j
  11. рдЬреЗ + = рдПрди
  12. result.append (j)
  13. рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо
  14. рдЕрдЧрд░ __name__ == '__main__' :
  15. рдкреНрд░рд┐рдВрдЯ рдПрдл (5)


рдЬрдм рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ 5 рд╕реЗ рд╡рд┐рднрд╛рдЬреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдмрдврд╝рддрд╛ рдХреНрд░рдо рд╣реИред



$ python pdb_jump.py



[5, 15, 30, 50, 75]








рдЖрдЧреЗ рдмрдврд╝реЛ


рдЖрдЧреЗ рдЬрд╛рдирд╛ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рд░реЗрдЦрд╛ рд╕реЗ рдЖрдЧреЗ, рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рд╕реНрдерд┐рдд рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ 13 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдХреЛ рдЫреЛрдбрд╝рддреЗ рд╣реБрдП, j рдХрд╛ рдорд╛рди рдирд╣реАрдВ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдХреЗ рд╕рднреА рдорд╛рди рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рдереЛрдбрд╝реЗ рдЫреЛрдЯреЗ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред



$ python -m pdb pdb_jump.py

> .../pdb_jump.py(7)<module>()

-> def f(n):

(Pdb) break 12

Breakpoint 1 at .../pdb_jump.py:12



(Pdb) continue

> .../pdb_jump.py(12)f()

-> j += n



(Pdb) pj

0



(Pdb) step

> .../pdb_jump.py(13)f()

-> result.append(j)



(Pdb) pj

5



(Pdb) continue

> .../pdb_jump.py(12)f()

-> j += n



(Pdb) jump 13

> .../pdb_jump.py(13)f()

-> result.append(j)



(Pdb) pj

10



(Pdb) disable 1



(Pdb) continue

[5, 10, 25, 45, 70]



The program finished and will be restarted

> .../pdb_jump.py(7)<module>()

-> def f(n):

(Pdb)








рд╡рд╛рдкрд╕ рдЬрд╛рдУ


рд╕рдВрдХреНрд░рдордг рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЙрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣рд╛рдБ j рдХрд╛ рдорд╛рди рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдВрдЦреНрдпрд╛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рдХрд▓реЗ рдЕрдиреНрдпрдерд╛ рдирд╣реАрдВред



$ python -m pdb pdb_jump.py

> .../pdb_jump.py(7)<module>()

-> def f(n):

(Pdb) break 13

Breakpoint 1 at .../pdb_jump.py:13



(Pdb) continue

> .../pdb_jump.py(13)f()

-> result.append(j)



(Pdb) pj

5



(Pdb) jump 12

> .../pdb_jump.py(12)f()

-> j += n



(Pdb) continue

> .../pdb_jump.py(13)f()

-> result.append(j)



(Pdb) pj

10



(Pdb) disable 1



(Pdb) continue

[10, 20, 35, 55, 80]



The program finished and will be restarted

> .../pdb_jump.py(7)<module>()

-> def f(n):

(Pdb)






рдирд┐рд╖рд┐рджреНрдз рдХреНрд░реЙрд╕рд┐рдВрдЧ


рд╕рдВрдХреНрд░рдордг "рд╕реЗ" рдФрд░ "рд╕реЗ" рдХреБрдЫ рднрд╛рд╡ рдЬреЛ рдЧрдгрдирд╛ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЦрддрд░рдирд╛рдХ рдпрд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдбрд┐рдмрдЧрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖рд┐рджреНрдз рд╣реИрдВред

  1. #! / usr / bin / env рдЕрдЬрдЧрд░
  2. # рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: utf-8
  3. #
  4. # рдХреЙрдкреАрд░рд╛рдЗрдЯ (c) 2010 рдбрдЧ рд╣реЗрд▓рдореИрдиред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
  5. #
  6. рдбреА рдПрдл (рдПрди):
  7. рдпрджрд┐ n <0:
  8. ValueError рдмрдврд╝рд╛рдПрдБ ( 'рдЕрдорд╛рдиреНрдп n:% s' % n)
  9. рдкрд░рд┐рдгрд╛рдо = []
  10. рдЬ = реж
  11. i for рд░реЗрдВрдЬ (n):
  12. j = i * n + j
  13. рдЬреЗ + = рдПрди
  14. result.append (j)
  15. рд╡рд╛рдкрд╕реА рдкрд░рд┐рдгрд╛рдо
  16. рдЕрдЧрд░ __name__ == '__main__' :
  17. рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
  18. рдкреНрд░рд┐рдВрдЯ рдПрдл (5)
  19. рдЕрдВрдд рдореЗрдВ :
  20. 'рд╣рдореЗрд╢рд╛ рдореБрджреНрд░рд┐рдд'
  21. рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
  22. рдкреНрд░рд┐рдВрдЯ рдПрдл (-5)
  23. рд╕рд┐рд╡рд╛рдп:
  24. рдкреНрд░рд┐рдВрдЯ 'рдПрдХ рддреНрд░реБрдЯрд┐ рдереА'
  25. рдФрд░ :
  26. рдкреНрд░рд┐рдВрдЯ 'рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдереА'
  27. 'рдЕрдВрддрд┐рдо рд╡рд┐рд╡рд░рдг' рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ


рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХреЛрдб рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред



$ python -m pdb pdb_no_jump.py

> .../pdb_no_jump.py(7)<module>()

-> def f(n):

(Pdb) break 21

Breakpoint 1 at .../pdb_no_jump.py:21



(Pdb) jump 8

> .../pdb_no_jump.py(8)<module>()

-> if n < 0:



(Pdb) pn

*** NameError: NameError("name 'n' is not defined",)



(Pdb) args



(Pdb)








рдЖрдк рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рдЬреИрд╕реЗ рдХрд┐ рд▓реВрдкреНрд╕ рдпрд╛ рдПрдХ рдХреЛрд╢рд┐рд╢: рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ред



$ python -m pdb pdb_no_jump.py

> .../pdb_no_jump.py(7)<module>()

-> def f(n):

(Pdb) break 21

Breakpoint 1 at .../pdb_no_jump.py:21



(Pdb) continue

> .../pdb_no_jump.py(21)<module>()

-> print f(5)



(Pdb) jump 26

*** Jump failed: can't jump into the middle of a block



(Pdb)








рдЕрдВрдд рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЖрдк рдЗрд╕рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓ рд╕рдХреЗрдВред

$ python -m pdb pdb_no_jump.py

> .../pdb_no_jump.py(7)<module>()

-> def f(n):

(Pdb) break 23

Breakpoint 1 at .../pdb_no_jump.py:23



(Pdb) continue

[5, 15, 30, 50, 75]

> .../pdb_no_jump.py(23)<module>()

-> print 'Always printed'



(Pdb) jump 25

*** Jump failed: can't jump into or out of a 'finally' block



(Pdb)








рдФрд░ рдореБрдЦреНрдп рд╕реАрдорд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХреНрд░рдордг рд╕реНрдЯреИрдХ рдХреЗ рдирд┐рдЪрд▓реЗ рдлреНрд░реЗрдо рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЪрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдвреЗрд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдкреНрд░рдЧрддрд┐ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред



$ python -m pdb pdb_no_jump.py

> .../pdb_no_jump.py(7)<module>()

-> def f(n):

(Pdb) break 11

Breakpoint 1 at .../pdb_no_jump.py:11



(Pdb) continue

> .../pdb_no_jump.py(11)f()

-> j = 0



(Pdb) where

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py(379)run()

-> exec cmd in globals, locals

<string>(1)<module>()

.../pdb_no_jump.py(21)<module>()

-> print f(5)

> .../pdb_no_jump.py(11)f()

-> j = 0



(Pdb) up

> .../pdb_no_jump.py(21)<module>()

-> print f(5)



(Pdb) jump 25

*** You can only jump within the bottom frame



(Pdb)








рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреБрдирдГ рдЖрд░рдВрдн


рдЬрдм рдбрд┐рдмрдЧрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдбрд┐рдмрдЧ рдореЛрдб рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛, рдФрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдпрд╛ рдЕрдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЦреЛрдП рдмрд┐рдирд╛, рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рднреА рдкреБрдирд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  1. #! / usr / bin / env рдЕрдЬрдЧрд░
  2. # рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: utf-8
  3. #
  4. # рдХреЙрдкреАрд░рд╛рдЗрдЯ (c) 2010 рдбрдЧ рд╣реЗрд▓рдореИрдиред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
  5. #
  6. рдЖрдпрд╛рдд sys
  7. рдбреА рдПрдл ():
  8. рдкреНрд░рд┐рдВрдЯ 'рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЖрд░реНрдЧреНрд╕:' , sys.argv
  9. рд╡рд╛рдкрд╕реА
  10. рдЕрдЧрд░ __name__ == '__main__' :
  11. рдЪ ()


рдбрд┐рдмрдЧрд░ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд╛рдо рдЖрдЙрдЯрдкреБрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдХреЛрдИ рдЕрдиреНрдп рддрд░реНрдХ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



$ python -m pdb pdb_run.py

> .../pdb_run.py(7)<module>()

-> import sys

(Pdb) continue



Command line args: ['pdb_run.py']

The program finished and will be restarted

> .../pdb_run.py(7)<module>()

-> import sys



(Pdb)








рдЖрдк рд░рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рд░рди рддрд░реНрдХреЛрдВ рдХреЛ рд╢реНрд▓реЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдереЗ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



(Pdb) run abc "this is a long value"

Restarting pdb_run.py with arguments:

abc this is a long value

> .../pdb_run.py(7)<module>()

-> import sys



(Pdb) continue

Command line args: ['pdb_run.py', 'a', 'b', 'c', 'this is a long value']

The program finished and will be restarted

> .../pdb_run.py(7)<module>()

-> import sys



(Pdb)








рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣реАрдВ рдФрд░ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



$ python -m pdb pdb_run.py

> .../pdb_run.py(7)<module>()

-> import sys

(Pdb) break 10

Breakpoint 1 at .../pdb_run.py:10



(Pdb) continue

> .../pdb_run.py(10)f()

-> print 'Command line args:', sys.argv



(Pdb) run one two three

Restarting pdb_run.py with arguments:

one two three

> .../pdb_run.py(7)<module>()

-> import sys



(Pdb)








рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдмрдЧрд░ рд╕реЗрдЯ рдХрд░рдирд╛


рдЬрдЯрд┐рд▓ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ - рдПрдХ рдЙрдкрдирд╛рдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдХреЗ рдкрд╣рд▓реЗ рд╢рдмреНрдж рдкрд░ рдЙрдкрдирд╛рдо рдХрд╛ рдкреНрд░рдХрдЯреАрдХрд░рдг рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЙрдкрдирд╛рдо рдмреЙрдбреА рдореЗрдВ рдХреЛрдИ рднреА рдХрдорд╛рдВрдб рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ рдбреАрдмрдЧрд░ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдбреАрдмрдЧрд░ рдХрдорд╛рдВрдб рдФрд░ рдкрд╛рдпрдерди рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЕрд▓рд┐рдпрд╛рд╕ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдирд╛рдо рджреВрд╕рд░реЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВред



$ python -m pdb pdb_function_arguments.py

> .../pdb_function_arguments.py(7)<module>()

-> import pdb

(Pdb) break 10

Breakpoint 1 at .../pdb_function_arguments.py:10



(Pdb) continue

> .../pdb_function_arguments.py(10)recursive_function()

-> if n > 0:



(Pdb) pp locals().keys()

['output', 'n']



(Pdb) alias pl pp locals().keys()



(Pdb) pl

['output', 'n']








рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрд╣рд╕ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рдЙрдкрдирд╛рдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЙрдкрдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде - рдЙрдкрдирд╛рдо рдХрд╛ рдирд╛рдо, рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЧрдИ рд╣реИред



(Pdb) alias

pl = pp locals().keys()



(Pdb) alias pl

pl = pp locals().keys()

(Pdb)








% N рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓рд┐рдпрд╛рд╕ рддрд░реНрдХреЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ n рддрд░реНрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред 1 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рд╕рднреА рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, % * рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред



$ python -m pdb pdb_function_arguments.py

> .../pdb_function_arguments.py(7)<module>()

-> import pdb

(Pdb) alias ph !help(%1)



(Pdb) ph locals

Help on built-in function locals in module __builtin__:



locals(...)

locals() -> dictionary



Update and return a dictionary containing the current scope's local variables.








рдЙрд▓реАрд╕рд╛ рдХреЗ рд╕рд╛рде рдЙрдкрдирд╛рдо рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдирд┐рдХрд╛рд▓реЗрдВред



(Pdb) unalias ph



(Pdb) ph locals

*** SyntaxError: invalid syntax (<stdin>, line 1)



(Pdb)








рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рд╣реЗрдЬрдирд╛


рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдХрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рдХреЛрдб рдЪрд▓рд╛рдирд╛, рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛, рдХреЛрдб рдФрд░ рдЗрдирдкреБрдЯ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдкреАрдбреАрдмреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рдбрд┐рдмрдЧрд░ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рдХреЛрдб рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХреЗрдВред рдбреАрдмрдЧрд░ рдХреЛ рджрд┐рдП рдЧрдП рдЖрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреАрдбреАрдмреА рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рджреЛрдмрд╛рд░рд╛ рдкрдврд╝ рд╕рдХреЗрдВред



~ / .Pdbrc рдлрд╝рд╛рдЗрд▓ рдкрд╣рд▓реЗ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╕рднреА рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ ./pdbrc рдкрдврд╝реЗрдВ рддрд╛рдХрд┐ рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХреЗрдВред



$ cat ~/.pdbrc

# Show python help

alias ph !help(%1)

# Overridden alias

alias redefined p 'home definition'



$ cat .pdbrc

# Breakpoints

break 10

# Overridden alias

alias redefined p 'local definition'



$ python -m pdb pdb_function_arguments.py

Breakpoint 1 at .../pdb_function_arguments.py:10

> .../pdb_function_arguments.py(7)<module>()

-> import pdb

(Pdb) alias

ph = !help(%1)

redefined = p 'local definition'



(Pdb) break

Num Type Disp Enb Where

1 breakpoint keep yes at .../pdb_function_arguments.py:10



(Pdb)








рдбрд┐рдмрдЧрд░ рд╢реЗрд▓ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрдорд╛рдВрдб рдХреЛ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдорд╛рдВрдб рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЬрд╛рд░реА, рдХреВрдж, рдЖрджрд┐) рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЕрдкрд╡рд╛рдж рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЖрдк ./.pdbrc рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрд╛рдж рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рджреМрд░рд╛рди рд╡реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗрдВред



All Articles