Concurrency-in-python-debugging-thread-applications
スレッドアプリケーションのデバッグ
この章では、スレッドアプリケーションのデバッグ方法を学習します。 また、デバッグの重要性も学びます。
デバッグとは何ですか?
コンピュータープログラミングでは、デバッグとは、コンピュータープログラムのバグ、エラー、および異常を見つけて削除するプロセスです。 このプロセスは、コードが記述されるとすぐに開始され、コードがプログラミングの他のユニットと組み合わされてソフトウェア製品が形成されると、連続した段階で継続されます。 デバッグはソフトウェアテストプロセスの一部であり、ソフトウェア開発ライフサイクル全体の不可欠な部分です。
Pythonデバッガー
Pythonデバッガーまたは pdb は、Python標準ライブラリの一部です。 見つけにくいバグを追跡するための優れたフォールバックツールであり、障害のあるコードを迅速かつ確実に修正できます。 以下は、 pdp デバッガーの2つの最も重要なタスクです-
- これにより、実行時に変数の値を確認できます。
- コードをステップ実行して、ブレークポイントを設定することもできます。
私たちは次の2つの方法でpdbで作業することができます-
- コマンドラインから;これは事後デバッグとも呼ばれます。
- 対話的にpdbを実行します。
pdbでの作業
Pythonデバッガで作業するには、デバッガに侵入したい場所で次のコードを使用する必要があります-
import pdb;
pdb.set_trace()
コマンドラインからpdbを操作するには、次のコマンドを検討してください。
- h(ヘルプ)
- d(下)
- u(up)
- b(ブレーク)
- cl(クリア)
- l(リスト))
- n(次))
- c(続行)
- s(ステップ)
- r(リターン))
- b(ブレーク)
以下は、Pythonデバッガーのh(help)コマンドのデモです-
import pdb
pdb.set_trace()
--Call--
>d:\programdata\lib\site-packages\ipython\core\displayhook.py(247)__call__()
-> def __call__(self, result = None):
(Pdb) h
Documented commands (type help <topic>):
========================================
EOF c d h list q rv undisplay
a cl debug help ll quit s unt
alias clear disable ignore longlist r source until
args commands display interact n restart step up
b condition down j next return tbreak w
break cont enable jump p retval u whatis
bt continue exit l pp run unalias where
Miscellaneous help topics:
==========================
exec pdb
例
Pythonデバッガーでの作業中に、次の行を使用してスクリプト内の任意の場所にブレークポイントを設定できます-
import pdb;
pdb.set_trace()
ブレークポイントを設定した後、スクリプトを正常に実行できます。 スクリプトは特定のポイントまで実行されます。行が設定されるまで。 スクリプト内のさまざまな場所で上記の行を使用してスクリプトを実行する次の例を検討してください-
import pdb;
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
print (final)
上記のスクリプトを実行すると、a =“ aaa”までプログラムが実行されます。これは、次の出力で確認できます。
出力
--Return--
> <ipython-input-7-8a7d1b5cc854>(3)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
*** NameError: name 'b' is not defined
(Pdb) p c
*** NameError: name 'c' is not defined
pdbでコマンド「p(print)」を使用すると、このスクリプトは「aaa」のみを印刷します。 a = "aaa"までブレークポイントを設定しているため、これに続いてエラーが発生します。
同様に、ブレークポイントを変更してスクリプトを実行し、出力の違いを確認できます-
import pdb
a = "aaa"
b = "bbb"
c = "ccc"
pdb.set_trace()
final = a + b + c
print (final)
出力
--Return--
> <ipython-input-9-a59ef5caf723>(5)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
'bbb'
(Pdb) p c
'ccc'
(Pdb) p final
*** NameError: name 'final' is not defined
(Pdb) exit
次のスクリプトでは、プログラムの最後の行にブレークポイントを設定しています-
import pdb
a = "aaa"
b = "bbb"
c = "ccc"
final = a + b + c
pdb.set_trace()
print (final)
出力は次のとおりです-
--Return--
> <ipython-input-11-8019b029997d>(6)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
'bbb'
(Pdb) p c
'ccc'
(Pdb) p final
'aaabbbccc'
(Pdb)