Python3 : 如何使用 PyCharm來設置斷點以及進入調試模式

PyCharm 是由 JetBrains 打造的一款 Python IDE,具有語法高亮、Project 管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制等功能,同時提供了對 Django 開發以及 Google App Engine 的支持。分爲個人獨立版和商業版,需要 license 支持,也可以獲取免費的 30 天試用。試用版本的 Pycharm 可以在官網上下載,下載地址爲:http://www.jetbrains.com/pycharm/download/index.html。 PyCharm 同時提供了較爲完善的調試功能,支持多線程,遠程調試等,可以支持斷點設置,單步模式,表達式求值,變量查看等一系列功能。PyCharm IDE 的調試窗口布局如圖 1 所示。

圖 1. PyCharm IDE 窗口布局

下面結合實例講述如何利用 PyCharm 進行多線程調試。具體調試所用的代碼實例見清單 10。

清單 10. PyCharm 調試代碼實例

__author__ = 'zhangying'
 #!/usr/bin/python
 import thread
 import time
 # Define a function for the thread
 def print_time( threadName, delay):
    count = 0
    while count <  5:
        count += 1
        print "%s: %s" % ( threadName, time.ctime(time.time()) )
 def check_sum(threadName,valueA,valueB):
    print "to calculate the sum of two number her"
    result=sum(valueA,valueB)
    print "the result is" ,result;
 def sum(valueA,valueB):
    if valueA >0 and valueB>0:
        return valueA+valueB
 def readFile(threadName, filename):
    file = open(filename)
    for line in file.xreadlines():
        print line
 try:
    thread.start_new_thread( print_time, ("Thread-1", 2, ) )
    thread.start_new_thread( check_sum, ("Thread-2", 4,5, ) )
    thread.start_new_thread( readFile, ("Thread-3","test.txt",))
 except:
    print "Error: unable to start thread"
 while 1:
 #   print "end"
    pass

在調試之前通常需要設置斷點,斷點可以設置在循環或者條件判斷的表達式處或者程序的關鍵點。設置斷點的方法非常簡單:在代碼編輯框中將光標移動到需要設置斷點的行,然後直接按 Ctrl+F8 或者選擇菜單"Run"->"Toggle Line Break Point",更爲直接的方法是雙擊代碼編輯處左側邊緣,可以看到出現紅色的小圓點(如圖 2)。當調試開始的時候,當前正在執行的代碼會直接顯示爲藍色。下圖中設置了三個斷點,藍色高亮顯示的爲正在執行的代碼。

圖 2. 斷點設置

圖片示例 2

表達式求值:在調試過程中有的時候需要追蹤一些表達式的值來發現程序中的問題,Pycharm 支持表達式求值,可以通過選中該表達式,然後選擇“Run”->”Evaluate Expression”,在出現的窗口中直接選擇 Evaluate 便可以查看。

Pychar 同時提供了 Variables 和 Watches 窗口,其中調試步驟中所涉及的具體變量的值可以直接在 variable 一欄中查看。

圖 3. 變量查看

圖片示例 3

如果要動態的監測某個變量可以直接選中該變量並選擇菜單”Run”->”Add Watch”添加到 watches 欄中。當調試進行到該變量所在的語句時,在該窗口中可以直接看到該變量的具體值。

圖 4. 監測變量

圖片示例 4

對於多線程程序來說,通常會有多個線程,當需要 debug 的斷點分別設置在不同線程對應的線程體中的時候,通常需要 IDE 有良好的多線程調試功能的支持。 Pycharm 中在主線程啓動子線程的時候會自動產生一個 Dummy 開頭的名字的虛擬線程,每一個 frame 對應各自的調試幀。如圖 5,本實例中一共有四個線程,其中主線程生成了三個線程,分別爲 Dummy-4,Dummy-5,Dummy-6. 其中 Dummy-4 對應線程 1,其餘分別對應線程 2 和線程 3。

圖 5. 多線程窗口

圖片示例 5

當調試進入到各個線程的子程序時,Frame 會自動切換到其所對應的 frame,相應的變量欄中也會顯示與該過程對應的相關變量,如圖 6,直接控制調試按鈕,如 setp in,step over 便可以方便的進行調試。

圖 6. 子線程調試

圖片示例 6

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章