掌握Python系統管理-調試和分析腳本1-debugging

調試和分析在Python開發中發揮着重要做用。 調試器可幫助程序員分析完整的代碼。 調試器設置斷點,而剖析器運行咱們的代碼,並給咱們執行時間的詳細信息。 分析器將識別程序中的瓶頸。咱們將瞭解pdb Python調試器,cProfile模塊和timeit模塊來計算Python代碼的執行時間。html

涉及內容:python

  • Python調試技術
  • 錯誤處理(異常處理)
  • 調試工具
  • 調試基本程序崩潰
  • 分析和計時程序
  • 使程序運行得更快

debugging

調試是解決代碼中出現阻止軟件正常運行問題的過程。linux

Python調試器設置條件斷點並可一次調試一行源代碼。咱們將使用Python標準庫中的pdb模塊調試咱們的Python腳本。程序員

Python調試技術

  • print()語句。
  • logging:這相似於print語句,但具備更多上下文信息。
  • pdb調試器:經常使用的調試技術。在解釋器和程序內從命令行使用pdb。
  • IDE調試器:IDE具備集成調試器。它容許開發人員執行他們的代碼,而後開發人員能夠在程序執行時進行檢查。好比windide中的調試菜單:

圖片.png

異常處理

參考 http://www.javashuo.com/article/p-nnpskexe-c.htmlwindows

調試工具簡介

Python支持許多調試工具:bash

  • winpdb
  • PyDev的
  • pydb
  • pdb
  • gdb
  • pyDebug

pdb模塊用於調試Python程序。 Python程序使用pdb交互式源代碼調試器來調試程序。 pdb設置斷點並檢查堆棧。微信

如今咱們將瞭解如何使用pdb調試器。有三種方法能夠使用此調試器:ide

咱們將建立一個pdb_example.py腳本,並在該腳本中添加如下內容:工具

class Student:
    def __init__(self, std):
        self.count = std

    def print_std(self):
        for i in range(self.count):
            print(i)
        return
if __name__ == '__main__':
    Student(5).print_std()複製代碼

以此腳本爲例學習Python調試,咱們將看到如何詳細啓動調試器。學習

  • 交互式執行
$ python3
Python 3.6.7 |Anaconda, Inc.| (default, Oct 23 2018, 19:16:44)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_example
>>> import pdb
>>> pdb.run('pdb_example.Student(5).print_std()')
> <string>(1)<module>()
(Pdb)
EOF        b          cl         cont       disable    exit       interact   list       next       quit       retval     source     unalias    up
a          break      clear      continue   display    h          j          ll         p          r          run        step       undisplay  w
alias      bt         commands   d          down       help       jump       longlist   pp         restart    rv         tbreak     unt        whatis
args       c          condition  debug      enable     ignore     l          n          q          return     s          u          until      where
(Pdb) continue
0
1
2
3
4複製代碼

要繼續調試,請在 ( Pdb )提示符後輸入continue,而後按Enter鍵。若是你想知道咱們能夠在這裏使用的選項,那麼在 ( Pdb )提示後按兩次Tab鍵。注意windows下按鍵可能會無效。

  • 交互式加載pdb模塊
$ python3 -m pdb pdb_example.py
> /home/andrew/code/meil/code/Mastering-Python-Scripting-for-System-Administrators-/Chapter02/pdb_example.py(1)<module>()
-> class Student:
(Pdb) continue
0
1
2
3
4
The program finished and will be restarted複製代碼
  • 腳本中開啓調試
import pdb

class Student:
    def __init__(self, std):
        self.count = std

    def print_std(self):
        for i in range(self.count):
            pdb.set_trace()
            print(i)
        return
    
if __name__ == '__main__':
    Student(5).print_std()複製代碼

執行:

$ python3 pdb_example.py
> /home/andrew/code/meil/code/Mastering-Python-Scripting-for-System-Administrators-/Chapter02/pdb_example.py(10)print_std()
-> print(i)
(Pdb) continue
0
> /home/andrew/code/meil/code/Mastering-Python-Scripting-for-System-Administrators-/Chapter02/pdb_example.py(9)print_std()
-> pdb.set_trace()
(Pdb) continue
1
> /home/andrew/code/meil/code/Mastering-Python-Scripting-for-System-Administrators-/Chapter02/pdb_example.py(10)print_std()
-> print(i)
(Pdb) continue
2
...複製代碼

 掃碼關注微信公衆學習文章乾貨資料

相關文章
相關標籤/搜索