アプリケーションのデバッグ—Werkzeugのドキュメント

提供:Dev Guides
Werkzeug/docs/2.0.x/debug
移動先:案内検索

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

WSGIゲートウェイ/サーバーに応じて、例外の処理は異なります。 ほとんどの場合、例外はstderrまたはエラーログに送られ、一般的な「500 InternalServerError」メッセージが表示されます。

これは最適なデバッグ環境ではないため、Werkzeugは、優れたトレースバックをレンダリングするWSGIミドルウェアを提供します。オプションで、任意のフレームでコードを実行するためのインタラクティブなデバッグコンソールを備えています。

危険

デバッガーは任意のコードの実行を許可するため、セキュリティ上の大きなリスクになります。 デバッガーを実稼働マシンで使用しないでください。 これを十分に強調することはできません。 本番環境でデバッガーを有効にしないでください。


ノート

対話型デバッガーは、複数のプロセスを開始するサーバーなどのフォーク環境では機能しません。 このような環境のほとんどは本番サーバーであり、デバッガーを有効にしないでください。


デバッガーの有効化

アプリケーションをDebuggedApplicationミドルウェアでラップして、デバッガーを有効にします。 または、use_debugger=Truerun_simple()に渡すと、それが自動的に行われます。


デバッガーの使用

有効にしてリクエスト中にエラーが発生すると、一般的な「内部サーバーエラー」ではなく、詳細なトレースバックが表示されます。 トレースバックは引き続き端末にも出力されます。

エラーメッセージは上部に表示されます。 クリックすると、トレースバックの一番下にジャンプします。 組み込みパッケージやインストール済みパッケージではなく、ユーザーコードを表すフレームは、青色で強調表示されます。 フレームをクリックすると、コンテキストの行がさらに表示され、もう一度クリックすると非表示になります。

evalex機能を有効にしている場合は、フレームにカーソルを合わせて右側に表示されるコンソールアイコンをクリックすると、トレースバック内のすべてのフレームのコンソールを取得できます。 クリックすると、次の場所でPythonコードを実行できるコンソールが開きます。

class=align-center|a screenshot of the interactive debugger インタラクティブコンソール内では、あらゆる種類のPythonコードを実行できます。 通常のPythonコンソールとは異なり、オブジェクトreprsの出力は、デフォルトで色付けされ、適切なサイズにストリップされます。 出力がコンソールが表示することを決定したものより長い場合、小さなプラス記号がreprに追加され、クリックするとreprが展開されます。

現在のフレームで定義されているすべての変数を表示するには、dump()関数を使用できます。 引数なしで呼び出して、すべての変数とその値の詳細なリストを取得するか、オブジェクトを引数として呼び出して、持つすべての属性の詳細なリストを取得できます。


デバッガーPIN

Werkzeug 0.11以降、デバッグコンソールはPINで保護されています。 これは、本番環境にデプロイするときにデバッガーを無効にするのを忘れた場合に、デバッガーが悪用される可能性を低くするためのセキュリティヘルパーです。 PINベースの認証はデフォルトで有効になっています。

コンソールを初めて開いたときに、コマンドラインに出力されるPINの入力を求めるダイアログが表示されます。 PINは、プロジェクトに固有の安定した方法で生成されます。 明示的なPINは、環境変数WERKZEUG_DEBUG_PINを介して提供できます。 これは数字に設定でき、PINになります。 この変数を値offに設定して、PINチェックを完全に無効にすることもできます。

間違ったPINを何度も入力した場合は、サーバーを再起動する必要があります。

この機能は、デバッガーを完全に保護することを目的としたものではありません。 これは、攻撃者がデバッガーを悪用しにくくすることを目的としています。 本番環境でデバッガーを有効にしないでください。


貼り付けエラー

「トレースバック(最後の最後の呼び出し)」ヘッダーをクリックすると、ビューは従来のテキストベースのトレースバックに切り替わります。 これをコピーして貼り付けると、質問したり問題を報告したりするときに情報を提供できます。