スポンサーリンク

コードが書ける!数式が書ける!AAが書ける!スタンプが貼れる!

無料の匿名掲示板型SNS「このはちゃんねる

新規会員募集中!

【Python】breakpoint関数でデバッガーを起動させる【入門第54回】

172, 2019-09-13

目次

breakpoint関数の使い方

こんにちは、narupoです。

今回はbreakpoint(ブレークポイント)関数の使い方を紹介します。
breakpoint関数はPythonの組み込み関数で、Python3.7以降で使えます。
breakpoint関数を実行するとデバッガーを起動させることができます。

breakpoint関数について、具体的には↓を見ていきます。

  • breakpoint関数を実行する
  • デバッガーとは?
  • デバッガーが起動しないように環境変数を設定する
  • 別のデバッガーを環境変数に設定する
  • breakpoint関数を使う意義

breakpoint関数を実行する

breakpoint関数を実行するには↓のようにします。

breakpoint()

↑のコードを実行すると↓のようにデバッガーが起動します。

breakpoint関数でPdbデバッガーを起動する光景

デバッガーとは?

デバッガーは、プログラムをデバッグするための専門のプログラム、あるいは機能です。
デバッガーについての詳細な解説はここでは行いませんが、気になる方は↓の記事をご覧ください。

TODO: リンク

breakpoint関数を実行するとデバッガーが起動します。
ですのでbreakpoint関数はプログラムをデバッグしたい時に使います。

デバッガーが起動しないように環境変数を設定する

breakpoint関数の動作は、環境変数PYTHONBREAKPOINTでコントロールすることができます。
環境変数PYTHONBREAKPOINT0を設定すると、breakpoint関数の呼び出しでデバッガーを起動させないようにすることができます。

Windowsのコマンド・プロンプトの場合

Windowsのコマンド・プロンプトから環境変数を設定するには↓のようにします。

set PYTHONBREAKPOINT=0

↑のようにコマンドラインからコマンドを入力すると環境変数PYTHONBREAKPOINT0を設定することができます。
この環境変数の値を確認するには↓のようにします。

echo %PYTHONBREAKPOINT%

↑のコマンドの実行結果は0になります。

WindowsのPoweshellの場合

WindowsのPowershellから環境変数を設定するには↓のようにします。

$env:PYTHONBREAKPOINT=0

↑のようにコマンドラインからコマンドを入力すると環境変数PYTHONBREAKPOINT0を設定することができます。
この環境変数の値を確認するには↓のようにします。

$env:PYTHONBREAKPOINT

↑のコマンドの実行結果は0になります。

Linux系のBashの場合

Bashの場合は↓のようにコマンドラインからコマンドを入力すると環境変数PYTHONBREAKPOINT0を設定することができます。

$ PYTHONBREAKPOINT=0

この環境変数の値を確認するには↓のようにします。

$ echo $PYTHONBREAKPOINT

環境変数PYTHONBREAKPOINTに0を設定すると

上記のようにして環境変数PYTHONBREAKPOINT0を設定すると、↓のコードを実行しても何もおこならなくなります。

breakpoint()

breakpoint関数は何も実行せずに静かに終了します。

別のデバッガーを環境変数に設定する

breakpoint関数は内部で何をやっているのかと言うと、デフォルトではpdb.set_trace()を実行しています。
つまり↓のコードは、

breakpoint()

↓のコードと同じです。

import pdb

pdb.set_trace()

breakpoint関数が実行する関数は、環境変数PYTHONBREAKPOINTで変更することができます。
たとえば環境変数PYTHONBREAKPOINTrandom.randomを入れて、breakpoint関数を↓のようにして実行します。

print(breakpoint())

↑のコードの実行結果は↓のようになります(結果は実行環境によって変わります)。

0.42432459487491314

これは↓のコードと同じです。

import random

print(random.random())

つまり、環境変数PYTHONBREAKPOINTrandom.randomと値を入れてbreakpoint関数を実行するとrandomモジュールのrandom関数が実行されます。
ちなみにrandom関数はランダムな値を返す関数です。

breakpoint関数は環境変数PYTHONBREAKPOINTに書かれている名前を解析し、パッケージやモジュールを適度インポートして関数を実行します。
そしてbreakpoint関数はその実行した関数の戻り値を単純に返すようになっています。
よって

print(breakpoint())

のようにすると、random.random()の実行結果が得られるわけです。

他にもbreakpoint関数は引数args, kwargsを取りますが、これはそのまま設定されている関数に渡されます。
つまり環境変数PYTHONBREAKPOINTrandom.randintを設定して、↓のようにしてbreakpoint関数を呼び出すと、

print(breakpoint(0, 100))

↓のような結果になります(結果は実行環境によって変わります)。

38

これは↓のコードと同じです。

import random

print(random.randint(0, 100))

breakpoint関数に渡された0, 100の引数がそのままrandom.randint関数に渡るわけですね。
randint関数は指定された範囲内の乱数を返す関数です。

以上のように、breakpoint関数が内部で呼び出す関数は、環境変数PYTHONBREAKPOINTで自由に設定することができます。
これを使えば好きなデバッガーをbreakpoint関数に登録することができます。

breakpoint関数を使う意義

プログラムにデバッグ処理を入れる場合はbreakpoint関数を使うようにしましょう。
breakpoint関数は環境変数PYTHONBREAKPOINTを使って自由に挙動を変えることができます。
よって、pdb.set_trace()などをベタ書きするよりも保守性において優れています。

環境変数PYTHONBREAKPOINT0を設定すればデバッガーを無効化することも出来ますし、あとになって使いたいデバッガーを変えることも出来ます。
そういう意味ではこのbreakpoint関数はなかなか便利な関数と言えます。

おわりに

デバッグはプログラミングではつきものです。
切っても切れない関係と言えるかもしれません。
そのデバッグを効率的にするbreakpoint関数は現代的なPythonのプログラミングでは必須と言えるでしょう。

以上、次回に続きます。

また見てね

投稿者名です。64字以内で入力してください。

必要な場合はEメールアドレスを入力してください(全体に公開されます)。

投稿する内容です。

スポンサーリンク

スポンサーリンク

スポンサーリンク

スポンサーリンク