ホームページ  >  記事  >  バックエンド開発  >  Linux環境でpdbを使用してPythonをデバッグする方法

Linux環境でpdbを使用してPythonをデバッグする方法

小云云
小云云オリジナル
2018-03-30 16:20:492839ブラウズ


pdb は Python に付属するパッケージで、Python プログラムの対話型ソース コード デバッグ機能を提供します。その主な機能には、ブレークポイントの設定、シングル ステップのデバッグ、関数のデバッグの開始、現在のコードの表示、スタック フラグメントの表示、および動的変更が含まれます。変数の値などpdb は、一般的に使用されるデバッグ コマンドをいくつか提供します。 ️
p 変数 #変数の値を表示
b 行番号 #break ブレークポイントがどの行に設定されているかr pdb test.py

の使用方法を以下に説明します。デバッグ用のデータベース。


リスト 1. テスト コードの例
import pdb
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
printfinal

リスト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) リスト
1 import pdb
2 a = "aaa"
3 pdb.set_trace() 4 b = "bbb"
5 c = "ccc"
6 -> a + b + c
7 印刷最終
[EOF]
(Pdb)
[EOF]
(Pdb) n
> /root/epdb1.py(7)?()
-> )

変数の値を出力する: デバッグ中に変数の値を出力する必要がある場合は、 p と変数名を直接使用できますが、出力では現在のステートメントの後の特定の値のみが表示されることに注意してください。が実行された場合、NameError: エラーが報告されます。

リスト 3. デバッグプロセス中に変数を出力する
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> 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: (Pdb) n
> /root/epdb1.py(7)?()
-> 最終
'aaabbbccc'
(Pdb)

c を使用して現在のデバッグを停止し、プログラムの実行を継続できるようにします。次のプログラムにさらに set_statement() ステートメントがある場合、リーダーはコードの最終出力の前に set_trace() 検証を追加できます。


リスト 4. デバッグを停止し、プログラムの実行を続行します
[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

コードの表示: 現在のコード ブロックはデバッグ中に記憶されていない場合があります。特定のコード ブロックを表示したい場合は、list または l コマンドを使用して表示できます。 list は、矢印 -> を使用して現在のデバッグ ステートメントを指します。

リスト 6. デバッグプロセス中に表示されるコード
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> bbb"
(Pdb) リスト
1 "インポート pdb
2 a = "aaa"
3 pdb.set_trace()
4 -> b = "bbb"
5 c = "ccc"
6 Final = a + b + c
7 pdb.set_trace()
8 最終を印刷
[EOF]
(Pdb) c
> /root/epdb1.py(8)?()
-> 最終を印刷
(Pdb) 3 pdb .set_trace() 4 )


関数を使用したデバッグ


リスト 6. 関数の使用例
import pdb
def combin(s1,s2): # サブルーチン結合を定義します。これは...
s3 = s1 + s2 + s1 # s2 を s1 のコピーの間に挟みます, ...
s3 = '"' + s3 +'"' # 二重引用符で囲みます,...
return s3 #
a = "aaa"
を返します。 pdb.set_trace ()
b = "bbb"
c = "ccc"
Final = combine(a,b)
printfinal


デバッグに n を直接使用すると、次の文が得られます。final=combine(a ,b) これを通常の代入ステートメントとして扱い、print Final と入力します。関数をデバッグしたい場合は、 s を使用して関数ブロックに直接入ることができます。関数のシングルステップ デバッグは、上記の概要と似ています。関数をステップ実行したくない場合は、ブレークポイントで直接 r を押して呼び出し元に戻ることができます。

清单 7. デバッグを実行します
[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 = combin(a,b)
(Pdb) s
--Call--
> /root/epdb2.py(3)combine()
-> def combin(s1,s2): # サブルーチン結合を定義します。これは...
(Pdb) n
> /root/epdb2.py(4)combine()
-> s3 = s1 + s2 + s1 # s2 を s1 のコピーの間に挟みます, ...
(Pdb) list
1 import pdb
2
3 def combin(s1,s2): # サブルーチン結合を定義します...
4 ->     s3 = s1 + s2 + s1 # s2 を s1 のコピーで挟みます, ...
5 s3 = '"' + s3 +'"' # 二重引用符で囲みます,...
6 return s3 # 返します。 
7
8 a = "aaa"
9 pdb.set_trace()
10 b = "bbb"
11 c = "ccc"
(Pdb) n
> /root/epdb2.py(5)combine()
-> s3 = '"' + s3 +'"' # 二重引用符で囲みます...
(Pdb) n
> /root/epdb2.py(6)combine()
-> return s3 # そしてそれを返します。 
(Pdb) n
--Return--
> /root/epdb2.py(6)combine()->'"aabbbaaa"'
-> return s3 # そしてそれを返します。 
(Pdb) n
> /root/epdb2.py(13)?()
-> print Final
(Pdb)


調整時に値を動的に変更できます。特に次の例のように、次のような制限があることに注意してください。 b の評価値を再変更することを考えています。b を使用してください。关推荐:


Pdb库调试Pythonの方式および常用コマンド

UsePDBモード调试Python程序介绍

UsePDB简单调试Python程序简明指南

以上がLinux環境でpdbを使用してPythonをデバッグする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。