アプリケーションのデバッグ—Werkzeugのドキュメント
アプリケーションのデバッグ
WSGIゲートウェイ/サーバーに応じて、例外の処理は異なります。 ほとんどの場合、例外はstderrまたはエラーログに送られ、一般的な「500 InternalServerError」メッセージが表示されます。
これは最適なデバッグ環境ではないため、Werkzeugは、優れたトレースバックをレンダリングするWSGIミドルウェアを提供します。オプションで、任意のフレームでコードを実行するためのインタラクティブなデバッグコンソールを備えています。
危険
デバッガーは任意のコードの実行を許可するため、セキュリティ上の大きなリスクになります。 デバッガーを実稼働マシンで使用しないでください。 これを十分に強調することはできません。 本番環境でデバッガーを有効にしないでください。
ノート
対話型デバッガーは、複数のプロセスを開始するサーバーなどのフォーク環境では機能しません。 このような環境のほとんどは本番サーバーであり、デバッガーを有効にしないでください。
デバッガーの有効化
アプリケーションをDebuggedApplication
ミドルウェアでラップして、デバッガーを有効にします。 または、use_debugger=True
をrun_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を何度も入力した場合は、サーバーを再起動する必要があります。
この機能は、デバッガーを完全に保護することを目的としたものではありません。 これは、攻撃者がデバッガーを悪用しにくくすることを目的としています。 本番環境でデバッガーを有効にしないでください。
貼り付けエラー
「トレースバック(最後の最後の呼び出し)」ヘッダーをクリックすると、ビューは従来のテキストベースのトレースバックに切り替わります。 テキストをコピーするか、ワンクリックで gist.github.com に自動的に貼り付けることができます。