例外が発生したときに、werkzeug で対話型コンソールを生成できることはわかっています。これにより、スタックトレースを備えたインタラクティブなコンソールが生成され、まさに私が必要としているものです。問題の環境は、SIGUSR2 シグナル時に対話型コンソールを生成して、実行中に大規模な qa コードがハングする原因となった原因をデバッグできるようにしたいということです。
小規模なプロジェクトの場合、発生した例外を最上位に伝播させ、そこで Web サービスの開始を処理し、ルートの 1 つで同じエラーを単純に再発生させて、スタックトレースを使用して対話型コンソールを起動するだけで十分な場合があります。
ただし、これは私にとっては選択肢ではないので、私の質問は次のとおりです。スタックフレームをDebuggedApplicationに提供するか、スタックフレームから例外を構築する方法はありますか(コンテキストとスタックトレースを失うことなく)?
これまでのところ、私は1をいじってきました:
def handler(signum, frame):
app = DebuggedApplication(application, evalex=True)
run_simple('', 9998, app, use_debugger=True)
そして2 : @Request.application def application(request): raise
def handler(signum, frame):
raise Exception('user requested interactive console')
def main():
try:
signal.signal(signal.SIGUSR2, handler)
... some code kicking of tests ...
except:
run_simple('', 9998, application, use_debugger=True)
1は、localhost:9998/console で対話型シェルのみを開始します (端末で python のみを入力するのと同じです)。そして2は不可能です。これは、(大幅なリファクタリングなしで) トップ レベルまでパーコレートする例外を取得できないためであり、複数の場所でこれを処理したくないからです。何か案は?
ありがとう