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

16
我希望能够加载和运行多行代码到交互式调试器中,以确保代码正常工作。这样做可以避免重新从代码开头运行,从而节省大量时间。我尝试了两种方法,但都没有成功。由于之前使用过 R 和 Matlab,我更喜欢这个功能。有人能提供建议吗?
方法 1: 根据 interactive shell debugging with pycharm,可以通过在 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?我尝试了,但不起作用。
编辑:找到了官方文档,但没有什么帮助: https://www.jetbrains.com/help/pycharm/2017.1/loading-code-from-editor-into-console.html

enter image description here

方法2: 直接在交互式调试器控制台中输入并测试代码。但是,没有简单的方法将代码(多行)带回编辑器。控制台历史记录会自动从最新到最旧排序。当从控制台历史记录复制时,您的所需代码的最后一行将成为编辑器中的第一行。 请参见下面的线程,我有相同的问题。 如何反转pycharm中的控制台历史记录顺序以进行复制粘贴?


1
只需在代码片段模式下使用先前提到的“评估表达式”(Alt + F8)窗口,然后将您喜欢的任何代码复制/粘贴到那里即可。 - heenenee
这不是问题的答案,但可能会有帮助。点击此处查看图片描述 - ADR
4个回答

9
按下 Alt+Shift+E 键将调用“在控制台中执行选择”命令。如果没有已经打开的控制台,PyCharm 将会打开一个普通(非调试)的 Python 控制台。
要在 调试器 控制台中执行选择,首先需要运行调试器,然后使用断点暂停脚本,接着该命令将按预期执行。
如果您有多个打开的控制台,例如一个常规控制台和一个调试器控制台,则在执行键盘命令之前必须激活目标控制台。

从我的截图中可以看出,我已经进入调试模式了。但是当我按下alt+shift+E时,它仍然在普通的Python控制台中运行。我必须最小化普通的Python控制台,并再次按下alt+shift+E才能在调试控制台中运行。 - Lisa
当我测试这个功能时,按下 Alt+Shift+E 会将所选内容发送到当前活动的控制台。因此,当您有多个控制台打开时,您需要先选择要定位的控制台。 - Dag Høidahl
仍在苦苦挣扎。我设置了调试点,调试代码并选择代码,但默认情况下它加载到Python控制台而不是调试器控制台。我必须最小化Python控制台,然后再次运行它,有时它会在调试器控制台中运行。你是如何做到“选择要定位的文件”?你点击调试器吗?然后选择代码并按atl+shift+e? - Lisa
是的,那就是我所做的。然而,现在我自己无法使其工作。每当调试器处于活动状态并且我在编辑器中选择一些代码并尝试执行它时,Python控制台区域会闪烁但不更新。自上次以来,我已经更新了我的PyCharm版本,所以也许它已经停止工作了。 - Dag Høidahl
@ Dag Høidahl,你找到了其他调试的方法吗? - Lisa
你实际上想要实现什么?你可以将代码粘贴到控制台中,或者通过选择代码并运行“评估表达式”(alt+F8)来执行代码。这对你有帮助吗? - Dag Høidahl

3
  1. 首先确保已经正确关闭控制台(不仅是隐藏),点击左边的关闭控制台按钮,即一个红色的X(参见此页面)。
  2. 现在重新打开控制台并单击“附加调试器”图标,即位于左下角第二个的绿色bug图标(在绿色加号上方)。它应该被按下并变为灰色。
  3. 现在如果你在控制台内导入模块并运行其中的函数,在这些函数中设置的断点就像正常情况一样被触发,并且你可以像调试脚本时一样逐步执行它们。你可以通过直接在控制台中键入或选择代码并选择“在控制台中执行”来实现操作,另一个答案中也有描述。不过在我的快速测试中,堆栈跟踪好像不起作用。例如,如果你在“dir”目录中的文件“foo.py”中有一个名为“fn()”的函数,请尝试以下操作: import dir.foo dir.foo.fn()

  4. 如果在导入代码后更改了代码,则Python控制台仍将使用旧代码。(如果然后在断点处停止,这可能会变得非常困惑。)你可以通过调用reload函数来强制更新到新代码,如下所示。或者回到步骤1(如果事情开始混乱,这是一个好主意)。 from importlib import reload # 这一行只在Python 3上需要 reload(dir.foo)


我尝试过,但行为并不总是一致的。当我在函数内放置调试点时,变量无法通过Python控制台访问。然而,如果调试点位于主函数处,则某些变量是可访问的,但数据框不是。 - Lisa
你有没有在导入模块后附加调试器的可能性? - Arthur Tacca
你能否编辑你的答案并提供更多细节?你是将代码加载到Python控制台还是调试器中?你是否在调试模式下运行?我想确保你的答案能够帮助更多人。 - Lisa
我增加了一些细节。希望现在更清晰了。 - Arthur Tacca

3

好的,我可能会有些偏差,但是从我使用R的经验来看,通过选择运行代码会带来一些挫败感。例如,如果你选择一段代码块来初始化一些变量并在源代码中稍后删除它们,如果你选择性地运行的源代码被修改,事情可能会变得有点混乱。此外,逐块运行代码有时会打乱顺序,但每次都从顶部运行代码的冲动显然会受到完成某些任务所需的等待时间的抵制。

那么问题来了,当你重新启动pycharm时,Python控制台是否记住上次打开pycharm时运行过的内容?不,它不会,但是当你运行程序时,图表显然可以工作,因为第2行定义了plt。如果你只运行第6行而没有第2行,你就会遇到问题。

此外,看起来你在第六行设置了断点,这是另一回事...


2
虽然这不是PyCharm的功能,但我强烈建议尝试Jupyter Notebook。它非常适用于原型设计。
如果您想按照PyCharm的方式执行代码块,则可以像Dag Høidahl指出的那样,在控制台中使用Alt+Shift+E。
然而,为了充分利用强大的PyCharm调试器,您应该编写一个单元测试来调用您想要测试(或调试)的特定代码段。这样,您就可以添加断点进行适当的调试,或自动确保未来的预期行为。尽管如此,编写单元测试还有许多其他优点,您将会感激。

有没有一种方法可以通过单击文件名来完成这个操作?通常需要在控制台中运行整个脚本而不必输入整个路径。 - Cowboy Trader
尝试在PyCharm中右键单击文件,然后选择“运行...”选项。 - matusko
它在新实例中运行,而不是在控制台中。 - Cowboy Trader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接