これらのライブラリとツールを使用して、ヒーローのようにPythonをデバッグします

公開: 2022-06-26

あなたは本当のPythonデバッグの専門家になりたいですか? これらのすばらしいPythonデバッグツールとライブラリを使用してPythonコードをデバッグします。これについては、後ほど説明します。

Pythonは、多くの開発目的で使用される汎用の高レベルのオブジェクト指向プログラミング言語です。 さらに、Webアプリケーション開発からWebスクレイピング、さらには機械学習やデータサイエンスなどのより複雑なアプリケーションまで、さまざまなアプリケーションに効果的な開発ツールです。

開発中は、プログラミングのバグと呼ばれるエラーが発生しやすくなります。 開発者は、コードから既存のバグと潜在的なバグを検出して排除するために、いくつかの手順を実行します。 その結果、プログラムコードがクラッシュするのを防ぐことができます。 このプロセスをデバッグと呼びます。

この記事では、使用できるいくつかの利用可能なPythonデバッガーについて説明します。 また、これらのデバッガーが互いにどのように異なるか、およびそれらの実装が効果的である理由についても説明します。

cProfilerデバッグライブラリ

cProfilerは、人気のあるライブラリであり、実行時間の長いコードのプロファイリングを実行するC拡張機能です。 長期的には、実行に時間がかかるプログラムコードのセクションを識別します。 コードのさまざまなセクションの実行にかかる正確な時間を特定しますが、コードのバグを完全に特定したり修正したりするわけではありません。

したがって、他のデバッガーを使用する必要が生じます。

幸い、代わりに、Pythonコードのデバッグツールとして、ipdb、Django-debug-toolbar、pyelftools、viztracer、py-spyなどの推​​奨ライブラリを使用できます。

ipdbデバッグツール

IPython対応のPythonデバッガーは、完全にpdbの機能を含むインタラクティブなサードパーティのデバッガーです。 Ipbdにも、インタラクティブなシェルIPythonサポートが付属しています。 このようなサポートには、タブ補完、カラーサポート、マジック機能などのサポート機能が含まれます。

このデバッガーは、関連する関数をエクスポートすることにより、IPythonデバッガーへのアクセスを可能にします。 また、pdbモジュールと同様に、イントロスペクションを向上させるための同様のインターフェイスを提供します。

Ipdbを使用したデバッグ

ライブラリには、以下のpipコマンドを使用してインストールする必要があります。

 pip install ipdb

ipdbの使用例は次のようになります。

 import ipdb alpha_list = ['a', 'b', 'c'] fruit_list = ['orange', 'mango', 'kiwi'] def nested_loop(): for fruit_list: print (fruit) ipdb.set_trace() for x in alpha_list: print(x) if __name__ == '__main__': nested_loop()

以下のコマンドを使用してPythonファイルを実行します。ここで、test.pyは私のファイルの名前です。

 python -m ipdb test.py

ipdbのインポートとipdb.set_trace()関数の実行により、プログラムの開始が可能になり、実行を通じてデバッガーが実行されます。

ipdb.pm()関数(事後分析)は、 %debugマジック関数と同様に機能します。

set_trace引数

コンテキストを引数としてset_traceに渡して、定義されたコードの数行を表示します。 さらに、 condは引数としても受け入れ、ブール値を受け入れ、 condtrueに設定するとset_traceインターフェイスを開始します。

構成ファイルの使用

コンテキスト引数は、それぞれホームフォルダーとプロジェクトフォルダーにあるidpdbファイルまたはsetup.cfgファイルで設定します。 ipdbの機能をさらにチェックすることを歓迎します。

Djangoデバッグツールバー

Djangoデバッグツールバーは、Djangoで人気のあるデバッグツールであるPythonフレームワークです。

この構成可能なパネルのセットは、現在の要求または応答のデバッグ情報を表示します。 ツールバーをクリックすると、パネルの内容に関する詳細が表示されます。

このツールは、Django開発環境を徹底的に検査します。

こちらのインストールプロセスと設定手順に従ってください。

Pyelftoolsライブラリ

pyelftoolsライブラリは純粋にPython上に構築されています。 ELFファイルとDWARFデバッグ情報を解析および分析し、Pythonの実行のみが必要です。

Pyelftoolsは外部ライブラリを持たないため、簡単に使用できます。 さらに、インストールせずにpyelftoolsを使用すると、環境変数でPYTHONPATHを調整するだけでよいため、非常に簡単です。

次を使用してインストールします。

 pip install pyelftools

pyelftoolsの実装には、それをインポートしてプログラムで呼び出すだけです。

アイスクリームデバッグツール

これは、Python開発者向けのもう1つの効率的なデバッグツールです。

以下に概説するように、アイスクリームとic()を使用すると、print()よりも多くの利点があります。

  • 文字通り、入力は比較的高速です。
  • データ構造をかなりうまく印刷します。
  • 式または変数名とその値をic()で出力します。
  • 出力の構文を強調しています。
  • オプションで、ファイル名、行番号、親関数などのプログラムコンテキストが含まれます。

このパッケージを使用する前に、以下のpipコマンドを使用してインストールしてください。

 pip install icecream

良い点は、 install()を使用してインストールすることにより、必ずしもすべてのファイルにic()をインポートしなくても、すべてのファイルでic()を使用できることです。 さらに、 install()は組み込みモジュールにic()を追加します。 インタプリタがインポートするすべてのファイルはic()を共有します。

x.pyという名前を付けることができる最初のルートPythonファイルで、 install() )を使用してic()を追加します。

 from icecream import install install() from y import mult mult()

y.py filで、x.pyファイルがインポートされています。ic()を呼び出します。

 def mult(): z=8 ic(z)

結果:

 y ic| z : 8

ic()をより効率的にするのは、ic()に渡された変数(それ自体を含む)を検査し、次の例のように引数と引数値を出力する機能です。

 from icecream import ic def mult(x): return x * 4 ic(mult(100))

出力:

 ic| mult(100): 400

さらに、ic()は引数を返すため、既存のコードに挿入できます。 以下の例はic| x: 12を返しますic| x: 12 、次にic| y: 48 ic| y: 48

 from icecream import ic x = 12 def mult(x): return x*4 y = mult(ic(x)) ic(y)

py-spyツールを使用したデバッグ

py-spyを使用して、デバッグツールとしてPythonプログラムのサンプルをプロファイリングできます。 プログラムを再起動したり、コードを変更したりすることなく、py-spyはPythonプログラムの実行を視覚化します。 さらに、Rustで記述されているため、オーバーヘッドが低くなります。

さらに、本番Pythonコードに対してpy-spyを使用することは、プロファイルされたPythonプログラムとは異なるプロセスを実行するため、安全であることを考慮する価値があります。

これまで見てきた他のすべてのツールと同様に、インストール後にpy-spyツールを使用できます。

 pip install py-spy

Pythonプログラムが本番トラフィックを処理しているにもかかわらず、py-spyを使用してこのプログラムをプロファイリングおよびデバッグできるため、重要なPythonプロファイラーツールになります。

Viztracerデバッガー

または、デバッグツールであるviztracerを使用して、Pythonプログラムの実行をトレースおよび視覚化することもできます。 また、オーバーヘッドの少ないロギングを備えたプロファイリングツールでもあります。

viztracerを効果的なデバッグツールにする理由は何ですか?

  • 使用は非常に簡単で、動作するのは外部パッケージに依存しません。
  • Viztracerは、すべてのオペレーティングシステムプラットフォーム(Windows、Linux、またはmacOS)で動作します。
  • その強力なフロントエンドは、GBレベルのトレースをスムーズにレンダリングします。
  • RegExを使用して、ソースコード内のコードセクションを変更せずに、任意の関数と、変数や属性、発生した例外、ガベージコレクター操作などの追加情報をログに記録します。
  • viztracerを低オーバーヘッドのデバッグツールにしているのは、プログラムで不要なデータを除外できることです。 その後、JSON形式でログをダンプする前に、古い情報を保持します。
  • これを使用して、プログラムの実行時に、インスタントイベント、変数イベント、期間イベントなどのカスタムイベントを挿入できます。 このように、viztracerがデータをトレースするときに印刷がいつ発生するかを通知することを除いて、印刷デバッグのように機能します。

結論

ソフトウェアプロファイリングと同じようにPythonプロファイリングとデバッグは、注意が必要な開発の重要なステップです。 この手順は、コードの全体的なパフォーマンスが最適化されるように、バグのあるコードセクションを除外するのに役立ちます。

上記で説明したデバッグツールは、Python開発者の作業を非常に簡単にする効率的なツールです。

他のデバッグツールがcProfilerよりも効果的に機能することを確認すると、真のヒーローのように、Pythonコードをデバッグし、これらのデバッガーを使用して潜在的なバグを修正し、コードがクラッシュせずに実行されないようにすることができます。

ハッピーデバッグ!