【问题标题】:Debugging Python bottle apps with WingIDE使用 WingIDE 调试 Python 瓶应用
【发布时间】:2015-02-03 05:54:04
【问题描述】:

我正在编写一个 Python Bottle 应用程序(Python 2.7.2 和 Bottle 0.10.9)并在 Linux 的 WingIDE (3.2.8-1) Professional 中开发它。这一切都很好,除非我想调试 Bottle 应用程序。我让它在 WingIDE 中以独立模式运行,但它不会在代码中的任何断点处停止,即使我设置了 Bottle.debug(False)。有没有人对我如何设置 Bottle 有任何建议/想法,以便它在 WingIDE 中的断点处停止?

【问题讨论】:

    标签: python debugging breakpoints bottle wing-ide


    【解决方案1】:

    如果您将重新加载器设置为 true,则瓶子会为实际应用启动一个子进程。在 Wing 中,您需要关闭重新加载器,然后它应该可以工作。

    run(reloader=False).  
    

    但是每次进行更改时,您都必须重新启动应用程序。

    【讨论】:

    • 这就是问题所在,设置 reloader=False 允许我在 WingIDE 中进行调试。你是对的,每次我做出改变时我都必须重新启动应用程序。没什么大不了的,因为我仍在构建应用程序。感谢您的帮助!
    • @writes_on 没问题,我经常使用 Wing IDE 和装瓶。与 webhelpers 问题相同,如果您能接受答案,我将不胜感激。如果您的接受率较高,人们将更愿意回答您的问题。快乐编程!
    • 情况与 IntelliJ Python 插件相同 - 如果应用程序以 reloader=True 运行,则断点不起作用。
    【解决方案2】:

    您是在 WSGI 下使用wingdbstub.py 调试还是从IDE 启动bottle?我对瓶子不是很熟悉,但一个常见的问题是 Web 框架的重新加载机制在未调试的子进程中运行代码。但是,我不确定瓶子是否会在 WSGI 下执行此操作,但是在导入wingdbstub(或从IDE 启动时启动)时打印进程ID,并在错过断点的行再次打印进程ID 将排除这一点。 Bottle.__init__ 的“重新加载器”参数可能与此处相关。如果设置为True,在Wing下调试时尝试设置为False。

    要尝试的另一件事是故意在断点所在的位置引发异常(例如“assert 0, 'test exception'”,并查看 Wing 的调试器中的异常工具中是否报告了此异常,如果是,Wing 是否也管理打开源代码。如果瓶子以无法找到源代码的方式运行代码,那么它仍然会在断言上停止(Wing 的调试器默认停止在 all 断言上即使主机代码处理了异常),但它不会显示调试文件,并会在状态区域(在 IDE 屏幕和消息工具中)显示一条消息,指示调试过程指定的文件名。根据这一点,可能可以解决问题(但如果文件名类似于“”,则需要修改 Bottle。

    顺便说一句,要插入仅在 Wing 调试器下运行的代码,我们可以这样:

    导入操作系统 如果 os.environ 中的“WINGDB_ACTIVE”: # 代码在这里

    如果这没有帮助,请发送电子邮件至wingware dot com 的支持。

    【讨论】:

    • 您完全可以通过在 SO 上提供支持来获得它。
    • 您也说得对,reloader=True 标志导致应用程序在 Wing 未调试的子进程中运行。设置 reloader=False 可以让我捕捉断点。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2016-05-27
    • 2021-11-16
    • 2018-01-22
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多