I'm writing an Python Bottle application (Python 2.7.2 and Bottle 0.10.9) and developing it in the WingIDE (3.2.8-1) Professional for Linux. This all works well, except when I want to debug the Bottle application. I have it running in standalone mode within WingIDE, but it won't stop at any of my break points in the code, even if I set Bottle.debug(False). Does anyone have any suggestions/ideas about how I can setup Bottle so it will stop on breakpoints within WingIDE?
2 回答
如果您将重新加载器设置为 true,则瓶子会为实际应用程序启动一个子进程。在 Wing 中,您需要关闭重新加载器,然后它应该可以工作。
run(reloader=False).
但是每次进行更改时,您都必须重新启动应用程序。
您是使用wingdbstub.py 在WSGI 下调试还是从IDE 启动bottle?我对瓶子不太熟悉,但一个常见的问题是 Web 框架的重新加载机制在未调试的子进程中运行代码。但是,我不确定瓶子是否会在 WSGI 下执行此操作,但是在导入wingdbstub(或从IDE 启动时启动)时打印进程ID 并再次在错过断点的行处打印将排除这一点。Bottle.__init__ 的“重新加载器”参数可能与此处相关。如果设置为 True,请尝试在 Wing 下调试时将其设置为 False。
要尝试的另一件事是在断点所在的位置故意引发异常(如“assert 0, 'test exception'”,并查看 Wing 的调试器中的异常工具中是否报告了此异常,如果是,Wing 是否也设法打开源代码。如果瓶子以无法找到源代码的方式运行代码,那么它仍然会在断言上停止(即使主机代码处理异常,Wing 的调试器也会默认停止所有断言)但是它将无法显示调试文件,并会在状态区域(在 IDE 屏幕和消息工具中)显示一条消息,指示调试过程指定的文件名。根据这一点,可能可以解决问题(但如果文件名类似于“”,则需要修改 Bottle。
顺便说一句,要插入仅在 Wing 调试器下运行的代码,我们可以这样:
import os if 'WINGDB_ACTIVE' in os.environ: # code here
如果这没有帮助,请在wingware dot com 发送电子邮件支持。