PyCharm 2020.2 ヘルプ

ステップ 2. 最初の Python アプリケーションをデバッグする

問題の原因を突き止める

前のチュートリアルCar スクリプトを作成して実行したことを覚えていますか?それをもう少し遊んで、average_speed 関数を次のように変更してみましょう。

def average_speed(self): return self.odometer / self.time

スクリプトを始めるときに何が起こるのかを見て、平均スピードを調べてみましょう。

Error messages

おっと ... PyCharm はランタイムエラーを報告します: ZeroDivisionError

コードをもう少し掘り下げて、何が間違っているのかを調べてみましょう。PyCharm デバッガーを使用して、コードで何が起こっているかを正確に確認できます。デバッグを開始するには、最初にいくつかのブレークポイントを設定する必要があります。ブレークポイントを作成するには、ガターをクリックするだけです

Adding breakpoints

次に、main 句の横にあるガターのRun iconアイコンをクリックし、デバッグ 'Car' を選択します。PyCharm はデバッグセッションを開始し、デバッグツールウィンドウを表示します。

Debug tool window

Resume icon ボタンをクリックしてスクリプトの実行を続行し、コンソールタブS を入力します。

Debug tool window: Console tab

スクリプトの実行を再開するには、Resume iconボタンをクリックします。さあ、見てください ! 例外はここにあります。別のブレークポイントも表示されました。デフォルトでは、PyCharm はあなたのコードで捕捉されなかった例外を停止し、稲妻のブレークポイントのアイコンを表示します。

Exception breakpoint

デバッガーはエラーメッセージも表示します。それで問題が見つかりました。デバッガーで、値 self.time がゼロに等しいことも確認できます。

周囲のコード

再度同じ問題が発生するのを避けるために、if ステートメントを追加して、時刻がゼロに等しいかどうかを確認してみましょう。これを行うには、メソッド average_speed でステートメント return self.odometer / self.time を選択し、次に Ctrl+Alt+Tコード | 囲む)を押します。

Surround code

PyCharm はスタブ if を作成し、適切な内容で埋め尽くします。

編集後、次のようになります:

Results of the surrounded code

デバッガーがあなたのコードが何をしているかを見ることができるかどうかを見てみましょう。

詳細なデバッグ

デバッグツールウィンドウには、フレーム変数ウォッチの専用ペインと、すべての入力および出力情報が表示されるコンソールが表示されます。コンソールを常に表示したい場合は、PyCharm ウィンドウの端のいずれかにコンソールをドラッグできます。

ステップ

コードが行ごとに何をしているかを見たい場合は、すべての行にブレークポイントを置く必要はなく、コードをステップ実行することができます。

プログラム例をステップ実行するのがどのように見えるかを見てみましょう。Resume iconボタンをクリックし、車の平均速度(タイプ 'S' )を確認するためにコンソールに行ってください。

ステップツールバーボタンを使用して、次に停止する行を選択できます。

Stepping toolbar

例:ステップオーバーボタンStep over iconをクリックすると、青いマーカーが次のコード行に移動するのがわかります。

Stepping over during the debugging

ステップインボタンStep into iconをクリックすると、行 action = input("What should I do? [A]ccelerate, [B]rake, " "show [O]dometer, or show average [S]peed?").upper() の後にデバッガーがファイル parse.py に入ることがわかります。

Stepping into during the debugging

ただし、Step over iconを引き続き使用すると、アプリケーションが次のループに渡されることがわかります。

Debugging: passing to the next loop

独自のコードに集中したい場合は、自分のコードにステップインボタンStep into my codeを使用してください。ライブラリクラスにステップインすることは避けられます。

詳細については、ステップツールバーおよびプログラムのステップスルーのセクションを参照してください。

監視

PyCharm では、任意の変数を見ることができます。監視式タブのツールバーでThe Add buttonをクリックして、見たい変数の名前を入力します。my_car.time にします。コード補完は次の場所にあります。

Watch completion

最初は、時刻が nil に等しいことがわかります。つまり、変数がまだ定義されていないことを意味します。

Watch error

ただし、プログラムの実行が変数を定義するスコープまで続くと、ウォッチは次のビューを取得します。

Watched variable gets a value

詳細については、ウォッチを追加、編集、削除するセクションを参照してください。

インラインデバッグ

コードの実行内容を簡単に確認できる別の PyCharm 機能、インラインデバッガーに気づいたかもしれません。ブレークポイントを押すとすぐに、PyCharm は多くの変数の値をエディターに表示します。

Inline debugging

このインラインデバッグ機能はデフォルトで有効になっています。インラインデバッグ値が表示されない場合は、デバッグツールウィンドウの設定アイコンSettingsを使用して有効になっていることを確認してください。

Show values inline

式の評価

最後に、任意の式をいつでも評価できます。例:変数の値を表示するには、Evaluate expression buttonボタンをクリックします。

次に開いたダイアログで、評価をクリックします。

Evaluate dialog

実際には、同じことを監視で見ることができます。評価式では、監視ではできないことを行うことができます。物事を変えることができます。

例:オドメーターの希望の値、たとえば 50 を入力してから、スクリプトをステップ実行し続けると、次のように表示されます。

Evaluate expression: target value

詳細については、式の評価のセクションを参照してください。

このモードでは、いくつかのコマンドと式を入力できます。例:変数値を変更できます。

changing variables during debugging in the Python console

要約

それをやった ! おめでとう ! PyCharm の助けを借りてやったことを繰り返しましょう:

  • 問題の原因を見つけた

  • ブレークポイントを設定する

  • プログラムを一歩進んだ

  • 監視を作成

  • 表現を評価しました

最終更新日 :

関連ページ:

ステップ 1. 最初の Python プロジェクトを作成して実行する

始める前に :次の前提条件が満たされていることを確認してください。PyCharmCommunity または Professional を使用しています。Python 自体をインストールしました。macOS または Linux を使用している場合、コンピューターにはすでに Python がインストール...

ブレークポイント

ブレークポイントは、特定のポイントでプログラムの実行を一時停止する特別なマーカーです。これにより、プログラムの状態と動作を調べることができます。ブレークポイントは、単純な場合(たとえば、コード行に到達したときにプログラムを一時停止する場合)や、より複雑なロジック(追加の条件に対するチェック、ログメッ...

デバッグツールウィンドウ

このツールウィンドウは、デバッグを開始すると使用可能になります。アプリケーションのデバッグセッションによって生成された出力を表示します。複数の実行 / デバッグ構成をデバッグする場合、各構成の出力は、対応する構成にちなんで名付けられた個別のタブに表示されます。各構成には、次のネストされたタブがありま...

コンソールタブ

このタブはでマークされ、出力およびエラーストリームメッセージを表示します。コンソールツールバー :スタックトレースのアップ / ダウン)このボタンをクリックすると、スタックトレース内を上下に移動し、カーソルがソースコード内の対応する場所にジャンプします。ソフトラップを使用このボタンをクリックすると、...

フレーム

フレームペインでは、アプリケーションのスレッドのリストにアクセスできます。スレッドを調べるには、ペイン上部のリストからスレッドを選択します。スレッドのステータスとタイプは、スレッド名の横にある特別なアイコンとテキストのメモで示されます。スレッドごとに、スタックフレームを表示し、フレームを調べ、フレー...

変数

変数ペインでは、アプリケーションのオブジェクトに格納されている値を調べることができます。フレームペインでスタックフレームが選択されると、変数ペインはそのスコープ内のすべてのデータ(メソッドパラメーター、ローカルおよびインスタンス変数)を表示します。このペインでは、オブジェクトのラベルを設定したり、オ...