當前位置:首頁 » 編程語言 » 單步調試python

單步調試python

發布時間: 2022-08-27 09:44:29

1. 怎樣調試 日誌 python 代碼

使用 pdb 進行調試
pdb 是 python 自帶的一個包,為 python 程序提供了一種交互的源代碼調試功能,主要特性包括設置斷點、單步調試、進入函數調試、查看當前代碼、查看棧片段、動態改變變數的值等。pdb 提供了一些常用的調試命令,詳情見表 1。
表 1. pdb 常用命令

命令
解釋

break 或 b 設置斷點
設置斷點

continue 或 c
繼續執行程序

list 或 l
查看當前行的代碼段

step 或 s
進入函數

return 或 r
執行代碼直到從當前函數返回

exit 或 q
中止並退出

next 或 n
執行下一行

pp
列印變數的值

help
幫助

下面結合具體的實例講述如何使用 pdb 進行調試。
清單 1. 測試代碼示例
import pdb
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
print final

開始調試:直接運行腳本,會停留在 pdb.set_trace() 處,選擇 n+enter 可以執行當前的 statement。在第一次按下了 n+enter 之後可以直接按 enter 表示重復執行上一條 debug 命令。
清單 2. 利用 pdb 調試
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> b = "bbb"
(Pdb) n
> /root/epdb1.py(5)?()
-> c = "ccc"
(Pdb)
> /root/epdb1.py(6)?()
-> final = a + b + c
(Pdb) list
1 import pdb
2 a = "aaa"
3 pdb.set_trace()
4 b = "bbb"
5 c = "ccc"
6 -> final = a + b + c
7 print final
[EOF]
(Pdb)
[EOF]
(Pdb) n
> /root/epdb1.py(7)?()
-> print final
(Pdb)

退出 debug:使用 quit 或者 q 可以退出當前的 debug,但是 quit 會以一種非常粗魯的方式退出程序,其結果是直接 crash。
清單 3. 退出 debug
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> b = "bbb"
(Pdb) n
> /root/epdb1.py(5)?()
-> c = "ccc"
(Pdb) q
Traceback (most recent call last):
File "epdb1.py", line 5, in ?
c = "ccc"
File "epdb1.py", line 5, in ?
c = "ccc"
File "/usr/lib64/python2.4/bdb.py", line 48, in trace_dispatch
return self.dispatch_line(frame)
File "/usr/lib64/python2.4/bdb.py", line 67, in dispatch_line
if self.quitting: raise BdbQuit
bdb.BdbQuit

列印變數的值:如果需要在調試過程中列印變數的值,可以直接使用 p
加上變數名,但是需要注意的是列印僅僅在當前的 statement 已經被執行了之後才能看到具體的值,否則會報 NameError: <
exceptions.NameError … ....> 錯誤。
清單 4. debug 過程中列印變數
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> b = "bbb"
(Pdb) n
> /root/epdb1.py(5)?()
-> c = "ccc"
(Pdb) p b
'bbb'
(Pdb)
'bbb'
(Pdb) n
> /root/epdb1.py(6)?()
-> final = a + b + c
(Pdb) p c
'ccc'
(Pdb) p final
*** NameError: <exceptions.NameError instance at 0x1551b710 >
(Pdb) n
> /root/epdb1.py(7)?()
-> print final
(Pdb) p final
'aaabbbccc'
(Pdb)

使用 c 可以停止當前的 debug 使程序繼續執行。如果在下面的程序中繼續有 set_statement() 的申明,則又會重新進入到 debug 的狀態,讀者可以在代碼 print final 之前再加上 set_trace() 驗證。
清單 5. 停止 debug 繼續執行程序
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> b = "bbb"
(Pdb) n
> /root/epdb1.py(5)?()
-> c = "ccc"
(Pdb) c
aaabbbccc

顯示代碼:在 debug 的時候不一定能記住當前的代碼塊,如要要查看具體的代碼塊,則可以通過使用 list 或者 l 命令顯示。list 會用箭頭 -> 指向當前 debug 的語句。
清單 6. debug 過程中顯示代碼
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> b = "bbb"
(Pdb) list
1 import pdb
2 a = "aaa"
3 pdb.set_trace()
4 -> b = "bbb"
5 c = "ccc"
6 final = a + b + c
7 pdb.set_trace()
8 print final
[EOF]
(Pdb) c
> /root/epdb1.py(8)?()
-> print final
(Pdb) list
3 pdb.set_trace()
4 b = "bbb"
5 c = "ccc"
6 final = a + b + c
7 pdb.set_trace()
8 -> print final
[EOF]
(Pdb)

在使用函數的情況下進行 debug
清單 7. 使用函數的例子
import pdb
def combine(s1,s2): # define subroutine combine, which...
s3 = s1 + s2 + s1 # sandwiches s2 between copies of s1, ...
s3 = '"' + s3 +'"' # encloses it in double quotes,...
return s3 # and returns it.
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = combine(a,b)
print final

如果直接使用 n 進行 debug 則到 final=combine(a,b)
這句的時候會將其當做普通的賦值語句處理,進入到 print final。如果想要對函數進行 debug 如何處理呢 ? 可以直接使用 s
進入函數塊。函數裡面的單步調試與上面的介紹類似。如果不想在函數里單步調試可以在斷點處直接按 r 退出到調用的地方。
清單 8. 對函數進行 debug
[root@rcc-pok-idg-2255 ~]# python epdb2.py
> /root/epdb2.py(10)?()
-> b = "bbb"
(Pdb) n
> /root/epdb2.py(11)?()
-> c = "ccc"
(Pdb) n
> /root/epdb2.py(12)?()
-> final = combine(a,b)
(Pdb) s
--Call--
> /root/epdb2.py(3)combine()
-> def combine(s1,s2): # define subroutine combine, which...
(Pdb) n
> /root/epdb2.py(4)combine()
-> s3 = s1 + s2 + s1 # sandwiches s2 between copies of s1, ...
(Pdb) list
1 import pdb
2
3 def combine(s1,s2): # define subroutine combine, which...
4 -> s3 = s1 + s2 + s1 # sandwiches s2 between copies of s1, ...
5 s3 = '"' + s3 +'"' # encloses it in double quotes,...
6 return s3 # and returns it.
7
8 a = "aaa"
9 pdb.set_trace()
10 b = "bbb"
11 c = "ccc"
(Pdb) n
> /root/epdb2.py(5)combine()
-> s3 = '"' + s3 +'"' # encloses it in double quotes,...
(Pdb) n
> /root/epdb2.py(6)combine()
-> return s3 # and returns it.
(Pdb) n
--Return--
> /root/epdb2.py(6)combine()->'"aaabbbaaa"'
-> return s3 # and returns it.
(Pdb) n
> /root/epdb2.py(13)?()
-> print final
(Pdb)

在調試的時候動態改變值 。在調試的時候可以動態改變變數的值,具體如下實例。需要注意的是下面有個錯誤,原因是 b 已經被賦值了,如果想重新改變 b 的賦值,則應該使用! B。
清單 9. 在調試的時候動態改變值
[root@rcc-pok-idg-2255 ~]# python epdb2.py
> /root/epdb2.py(10)?()
-> b = "bbb"
(Pdb) var = "1234"
(Pdb) b = "avfe"
*** The specified object '= "avfe"' is not a function
or was not found along sys.path.
(Pdb) !b="afdfd"
(Pdb)

pdb
調試有個明顯的缺陷就是對於多線程,遠程調試等支持得不夠好,同時沒有較為直觀的界面顯示,不太適合大型的 python 項目。而在較大的
python 項目中,這些調試需求比較常見,因此需要使用更為高級的調試工具。接下來將介紹 PyCharm IDE 的調試方法 .

2. 如何遠程調試Python代碼

JetBrains 公司出品的集成開發環境以製作精良風格一致得到廣泛好評,PyCharm 作為其中一款針對 Python 語言的 IDE 給了我很多幫助,感覺比較好用的是這個遠程調試。
遠程調試的代碼部署在遠端伺服器上,通過網路傳輸使用本機進行單步調試。實用場景為本機為非 GPU 機器,可以在遠端 GPU 伺服器上運行程序,觀察程序運行過程中,各個變數在斷點處的當前值。
本機打開程序,新建一個configuration

如上圖所示
類型為遠程調試
填寫 本機 ip和埠,
python2.x拷貝pycharm-debug.egg到遠端機器,python3.x拷貝的是pycharm-debug-py3k.egg
程序中加入
sys.path.append('/path/to/your/remote/pycharm-debug.egg')
import pydevd
pydevd.settrace('172.18.76.241', port=8602, stdoutToServer=True, stderrToServer=True)123

本機先debug此configuration,然後遠端再運行,默認斷點為pydevd.settrace的下一行

3. python如何一步步調試

裝個Pycharm

1 添加斷點

2 Debug下運行代碼:

3 F8:進行下一步操作

F7 :跳入下一個方法中

4. python中怎麼調試

Python中可以使用pdb進行代碼調試
pdb是python自帶的一個包,為 python 程序提供了一種交互的源代碼調試功能,主要特性包括設置斷點、單步調試、進入函數調試、
查看當前代碼、查看棧片段、動態改變變數的值等。pdb 提供了一些常用的調試命令,詳情見表 1。
下面是pdb常用命令
推薦學習《Python教程》。

5. python腳本可以單步調試嗎

可以,選擇帶調試功能的編輯器就行了,比如
PyCharm,
PyScripter

6. python 為什麼不能一步步手動調試

python的IDLE有調試功能
IDLE的調試功能比較初級,可以用下其它IDE的調試功能如pycharm


IDLE的調試模式:
圖一是打開調試模式的按鈕
圖二是打開的調試界面
圖三是當你運行任何一個運行腳本時,就會進行調試

單步調試什麼的都在那個面板上,斷點要在腳本文件里右鍵打

7. python在eclipse下可以單步調試嗎

在eclipse下可以單步調試python的方法:

1、右鍵單擊標尺欄添加斷點

程序調試過程中,常用的幾個快捷鍵如下:

單步跳入 Step Into: F5

單步跳過 Step Over: F6

單步返回 Step Return: F7

重新開始 Resume: F8

在控制台 Console 中,顯示出斷點之前代碼的執行結果。如果要查看某個變數的值,以變數 a 為例,可以手動在控制台中鍵入一行代碼 」print 『a is:』, a」,再連續按兩次 Enter 鍵,即顯示出變數的值。

8. Python如何實現單步調試

方法如下:
view plain
/***gcc -o libpycall.so -shared -fPIC pycall.c*/
#include <stdio.h>
#include <stdlib.h>
int foo(int a, int b)
{
printf("you input %d and %d\n", a, b);
return a+b;
}

9. python可以加斷點調試嗎

Python中可以加斷點調試

斷點(break point)是指在代碼中指定位置,當程序運行到此位置時便中斷下來,並讓開發者可查看此時各變數的值。

因斷點中斷的程序並沒有結束,可以選擇繼續執行。

實現斷點調試需要 IDE 的支持。下面以 PyCharm 來演示一下

在某一行代碼的左側欄點擊,就可以在這行增加斷點。現在在 3 個 if 判斷的地方都加上斷點。

選擇 debug,程序開始運行。

輸入 a、b 兩個值之後,程序就在第一個 if 處中斷,並且在工具欄中顯示出當前程序中的各種數值。

選擇「resume program」,程序就會繼續執行,直到遇到下一個斷點。

有了斷點功能的幫助,調試的時候就方便許多,很容易觀察程序運行時的狀態。

在斷點調試時,還有個經常一起使用的功能就是單步調試。

在程序中斷時,選擇「Step Over」,會向下執行一行代碼後繼續中斷。

當所處代碼行中有函數時,「Step Into」會中斷在函數內部,之後將在其中單步執行。對應的,「Step Out」將中斷在執行完當前所在函數後的位置。

這些操作在工具欄有快捷按鈕,也可通過快捷鍵操作。

更多Python知識,請關註:Python自學網!!

熱點內容
如何配置svi介面的ip地址 發布:2025-01-17 03:48:09 瀏覽:44
微軟怎麼解壓縮文件 發布:2025-01-17 03:43:06 瀏覽:203
有沒有手機可以用的java編譯器 發布:2025-01-17 03:38:56 瀏覽:542
手把手教你學c語言版 發布:2025-01-17 03:38:52 瀏覽:781
最優化遺傳演算法 發布:2025-01-17 03:35:24 瀏覽:546
四代飛度家用需要加裝哪些配置 發布:2025-01-17 03:34:28 瀏覽:876
安卓手機貓和老鼠怎麼換號 發布:2025-01-17 03:23:58 瀏覽:469
安卓系統怎麼下蝙蝠 發布:2025-01-17 03:20:07 瀏覽:19
加密解密文件 發布:2025-01-17 03:16:32 瀏覽:83
抗震柱加密區 發布:2025-01-17 03:03:06 瀏覽:134