Concurrency-in-python-debugging-thread-applications

提供:Dev Guides
移動先:案内検索

スレッドアプリケーションのデバッグ

この章では、スレッドアプリケーションのデバッグ方法を学習します。 また、デバッグの重要性も学びます。

デバッグとは何ですか?

コンピュータープログラミングでは、デバッグとは、コンピュータープログラムのバグ、エラー、および異常を見つけて削除するプロセスです。 このプロセスは、コードが記述されるとすぐに開始され、コードがプログラミングの他のユニットと組み合わされてソフトウェア製品が形成されると、連続した段階で継続されます。 デバッグはソフトウェアテストプロセスの一部であり、ソフトウェア開発ライフサイクル全体の不可欠な部分です。

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)