嗨,所有的Python开发人员!
在使用PyDev的Eclipse中,可以在调试时编辑Python文件。保存时,PyDev调试器将把更新后的代码重新加载到正在运行的程序中,并使用我的新代码。在JetBrains PyCharm(使用社区版)中,我如何做同样的事情?
当我这样做时,Eclipse/PyDev会编写这样的输出:
pydev debugger: Start reloading module: "MyWidget" ...
pydev debugger: Updated function code: <function close at 0x055F4E70>
pydev debugger: reload finished
我搜索了设置和网页,找不到任何提示。很高兴有什么主意。谢谢。
编辑:我发现在Eclipse/PyDev中,必须处于调试模式才能使用这个特性。我在PyCharm进行了测试,但没有重新加载。
毕竟,我为我的问题找到了一个有用且可接受的解决方法。它在PyCharm社区版3.1.2中工作,我想它在商业版中也会工作。我使用Python2.7.6、PySide(Qt)在一个中等规模的项目上进行了测试,其中有一个主窗口和20多个小部件、选项卡等等。遵循以下步骤。。。
有一些限制。。。它不会修复主方法或主窗口中的更改,因为不会再次创建它。在我的测试中,我无法从Qt重新加载小部件。但它适用于数据容器或工作者之类的类。
愿原力与你同在,当你尝试这一点时,不要犹豫添加你的经验。
谢谢你。
PyCharm不支持社区版或专业版中的“编辑并继续”,但以下是我在调试时找到的解决方法。
由于可以在控制台和/或表达式求值器中运行任意代码,在许多情况下,无需重新启动应用程序就可以执行对代码的更改。这与“编辑并继续”并不完全相同(这是我在Visual Studio中非常喜欢的一个功能,应该是Pycharm的一部分),但它在很大程度上避免了在更改后重新启动程序以查看新代码是否按预期工作。
让我来介绍一下我使用的一些技巧:
假设您有以下代码(有几个拼写错误/bug来说明这些技术)
如果您运行此代码,首先它会出错,因为您无法打印字符串加整数,但我也想在5上匹配,数组中没有55。我们走吧。
在for语句上设置一个断点,然后在调试器中运行代码。
当它进入调试器时,您会意识到它应该是5而不是55。您可以将第1行更改为test_value=[10,9,8,7,6,5,4,3,2,1]然后选择该行,右键单击并在控制台中选择“执行行”。。。将test_value的值更改为5的数组。现在,第4行的if语句在值5上变为true。这将触发第5行的语法错误。
现在,如果要确保语法正确,可以将第5行更改为print“找到值:”+str(i),选择该行并选择Evaluate Expression。。。从右键上下文菜单。当您单击Evaluate时,结果将显示在对话框中(或者在本例中,因为它是一个打印命令,所以显示在控制台中)
现在我已经解决了这两个问题,我可以在第二个过程中成功地运行代码,而不是在不使用这些技术的情况下可能需要多次传递。如果您在代码中发现一个需要花费一段时间才能设置的bug,那么这些技术真的会有回报。
很明显,这是一个非常做作的例子,但希望这说明了如何使用这两个求值表达式。。。在控制台中执行行。。。在不必每次在代码中发现错误时重新启动应用程序的情况下进行调试。
另外,如果您碰巧使用了Django,那么PyCharm(professional)将在您更改代码时重新启动服务器。因此,如果您在查看网页时发现问题,可以更改代码并切换回该网页,这样,正在运行的应用程序或已调试的应用程序将重新启动,并且在刷新网页时新代码将运行。同样,不是真正的编辑和继续,而是一个相当快速的方式作出改变和测试。
我有商业版的PyCharm,只是试着测试一个简单的python脚本。脚本如下:
我以调试模式运行代码,并在“print I”语句处放置了一个断点。当调试器在第一次迭代期间停止时,我将代码更改为如下所示:
PyCharm没有重新加载/重新编译修改后的脚本。考虑到这个简单的测试,我最好的猜测是PyCharm不会动态地重新加载.py文件。
相关问题 更多 >
编程相关推荐