在Pycharm中如何将代码加载到交互式调试器?

时间:2016-10-28 22:19:49

标签: python pycharm

我希望能够将几行代码加载并运行到交互式调试器中,以确保代码正常工作。通过这样做,我不需要从代码的开头重新运行,这需要更长的时间。我尝试了两种方法,但都没有工作。来自R和Matlab,我更喜欢这个功能。 有人可以建议吗?

方法1: 根据{{​​3}},可以通过

将pycharm编辑器中键入的代码加载到交互式调试器
1> set a debugging point
2> highlight the code you want to load to Python console
3> alt+shift+E

当我按照以下步骤操作时:我设置调试点,调试代码以触发调试点,然后选择代码按alt + shift + e。而不是将代码加载到调试控制台,它加载到python控制台默认。我无法访问我想在python控制台上下文中调试的变量和包。

我必须最小化python控制台,然后再次运行它。有时它在调试器控制台中运行。以下答案建议选择您想要定位的控制台"。步骤是什么?你点击调试器?然后选择代码并按atl + shift + e?我试过,它不起作用。

编辑:发现官方文档,但不是很有帮助: interactive shell debugging with pycharm

https://www.jetbrains.com/help/pycharm/2017.1/loading-code-from-editor-into-console.html

方法2: 直接在交互式调试器控制台中键入和试验代码。但是,没有简单的方法将代码(多行)带回编辑器。控制台历史记录从最新到最旧自动排序。从控制台历史记录复制时,您将最后一行所需代码作为编辑器中的第一行。 见下面的主题,我有同样的问题。 enter image description here

4 个答案:

答案 0 :(得分:8)

Alt + Shift + E 将调用命令"在控制台中执行选择"。如果还没有打开控制台,PyCharm将打开一个常规(非调试)Python控制台。

要在调试器控制台中执行选择,首先需要运行调试器。您需要使用调试器运行脚本并使用断点暂停它,然后该命令将按预期运行。

如果您有多个打开的控制台,例如一个常规调试器和一个调试器,必须在执行键盘命令之前激活目标控制台。

答案 1 :(得分:3)

好的,所以我可能会对此稍微偏离但是从我对R的使用中我感觉到选择运行代码所带来的挫败感。例如,如果您选择一个代码块来使用调试模式初始化某些变量,然后在源代码中删除它们,那么如果您选择性运行的源被更改,则事情可能会稍后变得混乱。同时运行代码有时会破坏顺序,但是每次运行代码的冲动肯定是通过完成某些任务所需的等待时间来完成的。

所以问题是,当你重新启动pycharm时,python控制台是否记得你上次打开pycharm时在其中运行的内容?不,它没有,但是当你运行你的程序时,情节可行,因为plt是在第2行定义的。如果你只是在没有第2行的情况下运行第6行,你就会遇到问题。

看起来你在第六行设置一个断点,这完全是另一回事......

答案 2 :(得分:3)

  1. 首先确保您已通过单击左侧的关闭控制台按钮正确关闭(不仅仅是隐藏)控制台,这是一个红色的X(请参阅this page)。
  2. 现在(重新)打开控制台并单击“附加调试器”图标,绿色错误图标位于左下方的第二个位置(绿色正上方)。它应该被推入灰色。
  3. 现在,如果您导入模块并在其中运行函数,那么在这些函数中设置的任何断点都应该像正常一样点击,您可以单步执行它们,就像调试脚本时一样。您可以通过直接在控制台中键入或选择代码并选择“在控制台中执行”来完成此操作,如另一个答案中所述。看起来堆栈跟踪不起作用(在我的快速测试中)。例如,如果目录“dir”中的文件“foo.py”中有函数“fn()”,请尝试以下操作: import dir.foo dir.foo.fn()

  4. 如果在导入代码后更改代码,Python控制台仍将使用旧代码。 (如果然后在断点处停止,这可能会非常混乱。)您可以通过调用reload函数强制更新新代码,如下所示。或者,回到第1步(如果事情开始容易混淆,这是一个好主意)。 from importlib import reload # This line only needed on Python 3 reload(dir.foo)

答案 3 :(得分:1)

虽然它不是pycharm的功能,但我强烈建议尝试jupyter notebook。它对于原型设计非常有用。

如果你想以pycharm的方式做这件事,正如DagHøidahl指出的那样,一个选择就是在Alt+Shift+E的控制台中执行代码块。

但是,要充分利用令人敬畏的Pycharm调试器,您应该编写一个unit test调用要测试(或调试)的特定代码段。这样您就可以正确地调试添加断点,或者自动确保将来的预期行为。 然而,编写单元测试还有许多其他优点,你会欣赏。