اشکال زدایی خطاهای برنامه

در تولید

سرور توسعه را اجرا نکنید یا اشکال زدا داخلی را در محیط تولید فعال نکنید. دیباگر اجازه می دهد کد پایتون دلخواه را از مرورگر اجرا کنید. توسط یک پین محافظت می شود، اما برای امنیت نباید به آن اعتماد کرد.

از یک ابزار ثبت خطا، مانند Sentry، همانطور که در ابزار های واقعه‌نگاری ارور ها توضیح داده شده است استفاده کنید، یا ثبت و اعلان ها را همانطور که در لاگ کردن توضیح داده شده فعال کنید.

اگر به سرور دسترسی دارید و request.remote_addr مطابق با IP شما باشد، می‌توانید کدی برای راه‌اندازی یک اشکال‌زدای خارجی اضافه کنید. برخی از اشکال زداهای IDE یک حالت راه دور نیز دارند، بنابراین نقاط شکست در سرور می توانند به صورت محلی با آنها تعامل داشته باشند. فقط یک دیباگر را به طور موقت فعال کنید.

دیباگر داخلی

سرور توسعه داخلی Werkzeug یک دیباگر را ارائه می دهد که در صورت بروز خطای کنترل نشده در طول یک درخواست، یک دیباگر را در مرورگر نشان می دهد. این دیباگر فقط باید در طول توسعه استفاده شود.

screenshot of debugger in action

هشدار

دیباگر اجازه می دهد تا کد پایتون دلخواه را از مرورگر اجرا کنید. توسط یک پین محافظت می شود، اما همچنان یک خطر امنیتی بزرگ است. سرور توسعه یا دیباگر را در محیط تولید اجرا نکنید.

The debugger is enabled by default when the development server is run in debug mode.

$ flask --app hello run --debug

When running from Python code, passing debug=True enables debug mode, which is mostly equivalent.

app.run(debug=True)

سرور توسعه and Command Line Interface have more information about running the debugger and debug mode. More information about the debugger can be found in the Werkzeug documentation.

اشکال زدای خارجی

اشکال زداهای خارجی، مانند آنهایی که توسط IDE ها ارائه می شوند، می توانند تجربه اشکال زدایی قدرتمندتری نسبت به دیباگر داخلی ارائه دهند. همچنین می‌توان از آن‌ها برای گذر از کد در طول درخواست قبل از مطرح شدن خطا یا در صورت عدم بروز خطا استفاده کرد. برخی از آنها حتی یک حالت راه دور دارند تا بتوانید کدهای در حال اجرا روی دستگاه دیگری را اشکال زدایی کنید.

When using an external debugger, the app should still be in debug mode, otherwise Flask turns unhandled errors into generic 500 error pages. However, the built-in debugger and reloader should be disabled so they don't interfere with the external debugger.

$ flask --app hello run --debug --no-debugger --no-reload

هنگام اجرا از پایتون:

app.run(debug=True, use_debugger=False, use_reloader=False)

Disabling these isn't required, an external debugger will continue to work with the following caveats.

  • If the built-in debugger is not disabled, it will catch unhandled exceptions before the external debugger can.

  • If the reloader is not disabled, it could cause an unexpected reload if code changes during a breakpoint.

  • The development server will still catch unhandled exceptions if the built-in debugger is disabled, otherwise it would crash on any error. If you want that (and usually you don't) pass passthrough_errors=True to app.run.

    app.run(
        debug=True, passthrough_errors=True,
        use_debugger=False, use_reloader=False
    )