Python ステップ スルー コード

Salman Mehmood 2023年10月8日
  1. pdb モジュールを使用して Python でコードをステップ実行する
  2. Python IDLE を使用して Python のコードをステップ実行する
Python ステップ スルー コード

このチュートリアルでは、Python デバッガーを使用してコードをステップ実行する方法について説明します。

PDBと呼ばれるコマンドラインツールについてゼロから解説します。 また、Python IDLE を使用してコードをステップ実行する方法も学習します。

pdb モジュールを使用して Python でコードをステップ実行する

他のプログラミング言語と同様に、Python にも Python スクリプトをデバッグするための優れたツールがあります。これは、Python Debugger の略である pdb です。

オペレーティング システムに Python をインストールするたびに、既にインストールされているため、pdb を個別にインストールする必要はありません。 Python がインストールされている場合は、ターミナルで動作します。

pdb モジュールは、デバッグにかかる時間を大幅に節約できるツールです。 実行中のプログラムの状態を調べるのに役立ちます。 それを試したり、変数の値を変更したり、さまざまな引数で関数を呼び出したり、コードのスニペットを実行したりできます。

これは、通常の print ステートメントよりもはるかに強力で、テストとは異なる状況を示します。 私たちのテストでは、コードが期待どおりに機能していないことが示されるだけですが、デバッグでは、プログラムの実行中に何が起こるかを確認できます。

すでに PyCharm IDE があり、PyCharm IDE でコードをデバッグできるのに、なぜ pdb を使用しているのか不思議に思うかもしれません。 pdb を使用する理由は、実際の状況では、Python スクリプトを何らかのサーバーで実行することがあるからです。

通常、これらのサーバーで IDE を使用する余裕はありません。 Python スクリプトをデバッグするには、ターミナルを使用する必要があります。 そのため、コマンドライン ツール pdb を使用して Python スクリプトをデバッグする方法を紹介します。

pdb モジュールには、set_trace() というブレークポイントがあります。 この関数を使用すると、さまざまな変数値を調べて、必要なことを実行できるブレークポイントが作成されます。

プログラムに 2 行のコードを挿入するだけで、さまざまなことを実行できるコマンド ライン操作を取得できます。 これについては後ほど説明します。

コードに入る前に、いくつかの異なるコマンド ライン操作の概要を確認します。

オペレーション 説明
n これにより、次のコード行が実行されます。
c この操作はコードの実行を継続し、実行を完了します。
l この操作により、実行中の行の前後の 3 行が一覧表示されるため、どこでどの 3 行が実行されたかがわかります。
s 関数呼び出しにステップインできます。 ここで、関数に入るときに n を使用すると、関数全体が実行され、関数呼び出しの後に次の行に進みます。
s を使用すると、関数にステップ インし、1 行ずつ実行できます。
b ブレークポイントを設定できるようになります。 プログラム内に b コマンドを入れることで、複数のブレークポイントを設定できます。
b[int] b の後に整数を設定して、数値の特定の行 (例: b10) にブレークポイントを設定できます。
b[func] b の後に関数名が続き、角かっこのない関数名にブレークポイントを設定します。
cl すべてのブレークポイントをクリアします。
cl[int] cl の後に整数が続くと、特定の行番号でブレークポイントがクリアされます。スペースはオプションです。 cl10 または cl 10 を入れることができます。 違いはありません。
p オプションで印刷も承っております。 変数 x があるとしましょう。 Python シェルで入力すると、x の値が出力されます。
p ステートメントを括弧付きで使用できます。 括弧内には、変数を入れるだけです。

より多くの操作が可能です。 詳細については こちら を参照してください。

小さなプログラムを入力した例を見てみましょう。 何もしません。 いくつかの変数値、print ステートメントを設定し、いくつかの数学関数を実行するだけです。

pdb をインポートし、set_trace() 関数を使用してブレークポイントを設定したことがわかります。

import pdb


def transform(x, y):
    x *= 2
    y = y ** 2
    z = x + y
    return z


x = 50
y = 60
z = 5
n = 1000

pdb.set_trace()
transform(5, 10)
print("z =" + str(z))
n = transform(2, 3)
print("n =" + str(n))

プログラムがどのように機能するか、デバッガーを使用して関数を分析する方法を見てみましょう。 したがって、プログラムを実行すると、デバッガーのコマンド プロンプトに Python が入力されていることがわかります。

実行される次の行は transform() 関数になるため、最初に行うことはリスト l を確認することです。 実行される前の 3 行と実行される次の 3 行が表示され、-> を使用して示す現在の場所が示されます。

pdb を使用した Python のステップ スルー コード - 出力 1

n コマンドを使用して次の行を実行するオプションがあります。これにより、transform() 関数全体が実行され、15 行目にジャンプします。または、s を使用して transform にステップ インすることもできます。 () 関数を transform() 関数内で 1 行ずつ実行し、その内部で何が起こっているかを確認します。

n を使用して、そこで何が起こったかを確認します。 n を使用して、transform() 関数を実行しました。

変数の値を出力したい場合、変数の名前を入力することはできますが、n は次の実行行を与えるため、n を出力することはできません。

別の方法として、p() コマンドを使用し、n 変数を括弧内に配置してその値を出力することもできます。

pdb を使用した Python のステップ スルー コード - 出力 2

他の設定したブレークポイントを確認したい場合は、b コマンドを使用することもできます。したがって、b と入力すると何も表示されませんが、行16に別のブレークポイントを設定できます。その後、b と入力すると、ブレークポイントが一覧表示されます。

cl はすべてのブレークポイントをクリアします。 はいと言って、ブレークポイントを削除します。

関数名にブレークポイントを設定することもできます。 これを行うと、transform() 関数の先頭にブレークポイントが設定されるため、その関数に入るたびに transform() 関数にステップ インします。

c を入力すると、次のブレークポイントに進み、再び c を入力すると、コードが終了します。

pdb を使用した Python のステップ スルー コード - 出力 3

コードへのデバッグは、バージョン 3.7 で導入された新しい組み込み関数である breakpoint() 関数を使用して実現できます。

Python の公式 ドキュメント によると、デフォルトでは、基本的には舞台裏で breakpoint() を使用して pdb.set_trace() を呼び出します。 pdb をインポートして set_trace() を呼び出す必要はありません。これを使用する代わりに、同じように機能する breakpoint() を使用できます。

Python IDLE を使用して Python のコードをステップ実行する

このセクションでは、Python IDLE を使用して Python プログラムをデバッグする方法を示します。 実証するために、2つの数値を加算する例を取り上げます。

n1 = int(input("Enter a first number :"))
n2 = int(input("Enter a second number :"))
Res = n1 + n2
print(n1, "+", n2, Res)

Python IDLE でデバッガーを使用するには、まずデバッガーをオンにして Python IDLE を開く必要があります。 Python IDLE を開いた後、上部にあるデバッグ オプションを開くことができます。

クリックすると、Debug Control ウィンドウが表示されます。 ここで、デバッグがオンになっていることがわかります。

Python IDLE を使用した Python のステップ スルー コード - 例 1

それを開くと、デバッグ コントロール ウィンドウが表示されます。 このコントロール ウィンドウは非アクティブで、どこでもクリックできません。

f5 を押しながら Python スクリプトを実行してアクティブにする必要があります。

デバッグ コントロール ウィンドウには、複数のボタンがあります。 ボタンの名前は、gostepoverout,、および quit です。 go を押すと、入力を入力し、入力後に出力を与えるように求められます。 そうしないと、スタックします。

out を使用すると、関数を実行していると想定されるため、コードの実行が終了し、プログラムの段階的な実行は表示されません。 プログラムを実行して出力を表示するだけです。 ステップバイステップの実行をスキップしたい場合に便利です。

このプログラムがどのように動作し、どの行が実行され、このプログラムがどのように流れるかを確認したい場合は、このステップまたはオーバーを使用できます。 step オプションは、プログラムに関するすべての情報を提供します。

プログラムが内部でどのように動作するかは知りたくないが、そのためにどの行が実行されているかだけを知りたい場合、最良のオプションは over です。 最後は quit です。 quit を使用すると、プログラムの実行中に終了します。

Python IDLE を使用したデバッガーの作業を次に示します。

Python IDLE を使用した Python のステップ スルー コード - 例 2

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn