目录

  • 摘要
  • 调试工具窗口
    • 会话
    • 工具栏
    • 调试工具栏
    • 单步工具栏
    • 调试器选项卡
      • 调用栈帧(Frames)
      • 变量(Variables)
        • 💡 表达式求值区域(Evaluate expression field)
        • 🖱️ 右键菜单(Context Menu)
        • 变量类型
      • 监视(Watches)
        • 表达式求值字段(Evaluate expression field)
        • 工具栏(Toolbar)
        • 右键菜单(Context menu)
  • 调试过程
    • 断点
      • 断点类型
      • 设置断点
      • 管理断点
      • 断点图标
    • 启动调试器会话
    • 检查挂起的程序
    • 逐步执行程序
    • 使用 PyCharm 进行远程调试
    • 使用调试控制台
  • 尾声

摘要

写代码这么多年,我一直是“打印派”的忠实拥趸。每当程序出了问题,我下意识地就在关键位置加上 print()pprint() 来输出变量、状态或者程序流程。对于一些小项目,这种方式确实简单高效,也容易快速定位问题。

但当我开始开发更加复杂的应用,比如 AI Agent 系统,print 调试就显得力不从心了。大量的模块调用、异步逻辑、状态切换,让单纯靠打印信息已经难以理清整个程序的运行脉络。而一不小心,满屏的调试信息不仅没帮我找到问题,反而制造了更多干扰。

这时候,我开始认真学习 PyCharm 的调试工具。从最基本的断点设置,到条件断点、变量追踪、堆栈查看,再到 Evaluate Expression、数据修改和多线程调试等进阶功能,PyCharm 提供了一整套强大的调试能力,几乎能覆盖所有开发场景。

本篇博客将系统讲解我从“print 调试”逐步转向“IDE 调试”的心路历程,并结合一些真实的项目案例,介绍如何使用 PyCharm 的 Debug 功能来高效排查和解决复杂问题。无论你是初学者,还是像我一样长年“只用打印”的开发者,都可以从中找到属于你的调试利器。

调试工具窗口

当你启动调试会话时,Debug 工具窗口会自动打开。你可以使用这个窗口来控制调试过程,查看和分析程序数据(如调用栈、变量等),并执行各种调试操作。

默认情况下,当程序运行到断点时,Debug 工具窗口会自动打开,并且在调试会话结束后不会自动关闭。
如果你想修改这个行为,可以前往 Build, Execution, Deployment | Debugger 设置页面(快捷键 Ctrl+Alt+S),取消勾选 Show debug window on breakpoint(在断点处显示调试窗口) 选项即可。

在这里插入图片描述

    • Sessions tabs:会话选项卡
    • Debugger console tab:调试器控制台选项卡
    • Variables and watches:变量与监视
    • Frames:调用栈帧
    • Debugger toolbar:调试工具栏

会话

可用的调试会话被分隔在 调试 工具窗口顶部的选项卡中。

如果您为特定的运行/调试配置 启用了服务工具窗口 ,那么当您调试这些配置时,调试工具窗口的整个视图将显示在服务工具窗口中。

编辑器中的所有信息,例如 内联变量值和执行点,都会显示在选定的会话选项卡中。 如果您同时运行多个使用相同的调试会话,这一点很重要。

当您关闭一个选项卡时,相应的调试会话会终止。

在这里插入图片描述

工具栏

调试器工具栏包含 控制调试器会话和 单步操作的最常用操作。

在这里插入图片描述
您可以根据自己的喜好配置工具栏上可用的操作列表。

  1. 要添加调试操作,请右键单击调试器工具栏,从上下文菜单中选择 添加到调试器工具栏 ,然后从列表中选择所需的操作。
    在这里插入图片描述

  2. 要添加与调试无直接关系的操作,请右键单击调试器工具栏,然后从上下文菜单中选择 自定义工具栏。

    在这里插入图片描述
    在打开的对话框中,单击 添加 ,然后选择所需的操作。

调试工具栏

无论选择了哪个选项卡,您始终可以在窗口左侧使用以下工具栏控件,以传统UI为例:

项目

工具提示和快捷键

描述

重启

重新运行

CtrlF5

点击此按钮以停止当前应用程序并再次运行(继续运行直到下一个断点)。

恢复

恢复程序

F9

当应用程序暂停时,点击此按钮以恢复程序执行。

暂停

暂停程序

Ctrl+Pause

点击此按钮以暂停程序执行。

停止

停止

CtrlF2

单击此按钮通过标准 shutdown 脚本外部终止当前进程。

查看断点

查看断点

CtrlShiftF8

点击此按钮以打开 断点 对话框,您可以在其中配置断点行为。

静音断点

静音断点

使用此按钮切换断点状态。

按钮在 调试工具窗口的工具栏中被按下时,项目中的所有断点都会被静音,其图标变为灰色: muted_breakpoint.png

您可以暂时静音项目中的所有断点,以便在不中断断点的情况下执行程序。

显示选项菜单

设置

点击此按钮以打开包含以下选项的菜单:

  • 内联显示值 :选择此选项以启用 内联调试功能,该功能允许在编辑器中直接在变量使用位置旁边查看其值。

  • 按字母顺序排列值 :选择此选项以按字母顺序对 变量窗格中的值进行排序。

  • 在会话完成时取消静音断点 :选择此选项以在调试会话完成后重新启用所有已禁用的断点。

  • 显示返回值 :选择此选项以在单步执行时显示当前帧中已执行函数的返回值。

  • 简化变量视图 :选择此选项将以下名称包含到 特殊变量 组中:

    • 所有带有双下划线名称的变量。

    • 所有 functionclassobjmodule 的实例。

    • 如果已启动带有 IPython 的调试控制台,则包括所有 IPython 内部变量。

  • 变量加载策略。 您可以选择以下策略之一:

    • 同步 :如果启用此选项,显示的消息是 Collecting data ,之后调试器会显示变量的值。

    • 异步 :如果启用此选项,调试器中的变量会单独加载(异步)。 在这种情况下,如果加载变量需要较长时间,调试器会显示 ...Loading Value 消息,然后显示其值,或者如果变量加载过慢,则显示 Loading timed out 消息。 请注意警告消息,建议切换到 按需模式。

    • 按需 :如果启用此选项,调试器会显示 Show Value 消息。 点击它以启用加载。

    请注意,任何加载策略的更改在您重新运行调试过程后生效。

固定选项卡页

点击此按钮以固定或取消固定当前选项卡。 当窗口中的标签页达到最大数量时,您可能需要将一个标签页固定,防止其自动关闭。

单步工具栏

项目

工具提示和快捷键

描述

显示执行点

显示执行点

AltF10

点击此按钮以突出显示编辑器中的当前执行点,并在 窗口 窗格中显示相应的堆栈帧。

步过

步过

F8

点击此按钮以执行程序,直到当前方法或文件中的下一行,跳过当前执行点引用的方法(如果有)。 如果当前行是方法中的最后一行,执行步骤将跳转到该方法之后执行的行。

步入

步入

F7

点击此按钮以使调试器进入当前执行点调用的方法。

强制单步执行

强制步入

AltShiftF7

点击此按钮以使调试器进入当前执行点中调用的方法,即使该方法将被跳过。

单步进入我的代码

单步执行我的代码

AltShiftF7

点击此按钮以跳过进入库源代码,并专注于您的代码。

步出

步出

ShiftF8

点击此按钮可使调试器退出当前方法,并跳至其后执行的行。

运行到光标处

运行到光标处

AltF9

点击此按钮以恢复程序执行,并暂停直到执行点到达编辑器中当前光标位置的行。 不需要断点。 实际上,在光标处为当前行设置了一个临时断点,一旦程序执行暂停,该断点就会被移除。 因此,如果文本光标位于已执行的行,程序将只是恢复执行,因为无法回滚到先前的断点。 此操作在您深入方法序列且需要一次退出多个方法时特别有用。

如果在应该执行的行上设置了断点,在到达指定行之前,调试器会在遇到的第一个断点处暂停。

tip:

当您需要在特定行设置一种临时断点,而程序执行不应中断时,请使用此操作。

评估表达式

评估表达式

AltF8

点击此按钮可 评估表达式。

调试器选项卡

调用栈帧(Frames)

Threads & Variables 选项卡中的 Frames 面板(调用栈帧)可用于查看当前应用程序中的所有线程列表。

在这里插入图片描述

要检查某个线程,只需从面板顶部的线程列表中选择它。每个线程的状态和类型会通过图标和线程名称旁的文字说明进行标识。

对于选中的线程,你可以:

  • 查看其调用栈帧(Stack Frame)
  • 展开并检查各级帧(函数调用)
  • 在帧之间导航
  • 自动跳转到该帧对应的源代码位置

如需查看某个调用帧中保存的变量值,请使用 Debug 工具窗口中的 Variables(变量) 面板。

线程图标(每个线程旁的图标表示该线程的状态):

变量(Variables)

Threads & Variables 选项卡中的 Variables 面板 可用于查看应用程序中各个对象的实际值。

在这里插入图片描述
当你在 Frames 面板 中选中了某个调用栈帧后,Variables 面板 会显示该帧作用域内的所有数据,包括方法参数、本地变量和实例变量等。

在这个面板中,你可以执行以下操作:

  • 为对象设置标签
  • 展开并查看对象的内部结构
  • 评估任意表达式
  • 将变量添加到监视列表(Watches)
  • 以及更多调试相关操作
💡 表达式求值区域(Evaluate expression field)

Watches 面板 处于隐藏状态时,Variables 面板 中会显示一个 “表达式求值” 输入框,用于直接输入并计算任意表达式。

  1. 要评估某个表达式,只需在此字段中输入表达式,然后按 Enter 键即可。
  2. 结果将直接显示在下方。你还可以点击输入框右侧的图标,将该表达式添加到监视列表中,便于后续持续追踪。

在这里插入图片描述

🖱️ 右键菜单(Context Menu)
项目快捷键说明
新建监视(New Watch)创建一个新的监视表达式。会打开一个文本输入框,你可以在其中输入要监视的表达式。
删除监视(Remove Watch)Delete删除当前选中的监视表达式。
编辑(Edit)F2修改当前选中的监视表达式。
删除所有监视(Remove All Watches)一次性删除所有监视表达式。
自定义数据视图(Customize Data View)添加自定义类型渲染器(type renderer),用于以特定方式展示某些对象。
检查(Inspect)适用于字段、局部变量和引用表达式。打开一个非模态的“检查”窗口,便于集中查看某个对象引用。你可以同时打开多个检查窗口,它们的视图与监视面板一致,但更节省空间。
设置值(Set Value)F2修改某个字段或变量在运行时的值。
复制值(Copy Value)Ctrl+C将选中变量的值复制到剪贴板。如果选中多个变量,不仅值会被复制,结构也会保留,粘贴到文本文件时格式会自动缩进,类似调试器的树形结构,方便阅读。你也可以将鼠标悬停在值上查看其内容。
复制 JSON(Copy JSON)仅在 JavaScript 上下文中可用。以 JSON 格式复制选中的值。
与剪贴板中的值比较(Compare Value with Clipboard)将当前选中变量的值与剪贴板中的内容进行比较。
复制名称(Copy Name)复制当前选中变量的名称到剪贴板。
评估表达式(Evaluate Expression)Alt+F8在弹出的对话框中对选中的变量进行表达式求值。
添加到监视(Add to Watches)为当前选中的节点(非静态节点)创建表达式并添加到监视面板中。
显示引用此对象的实例(Show Referring Objects)查看哪些对象引用了当前选中的变量。
跳转到源代码(Jump to Source)F4在编辑器中打开该变量或字段所在的源代码,并将光标定位到对应行。
跳转到类型定义(Jump to Type Source)F4跳转到当前变量或字段所属类的定义位置。
查看为(View as)选择变量值的显示格式。
🔹 Hex(十六进制):适用于数值变量。
🔹 Binary(二进制):适用于二进制数据。
查看为数组(View as Array)适用于表示 NumPy 数组的变量。需要在解释器中安装 NumPy。也可以点击变量旁边的 View as Array 链接。
查看为图像(View as Image)适用于 NumPy 的 1D/2D/3D 数组变量。需要安装 NumPy 和 Pillow。
查看为 DataFrame(View as DataFrame)适用于表示 pandas DataFrame 的变量。需要在解释器中安装 pandas。也可以点击变量旁边的 View as DataFrame 链接。
变量类型

在这里插入图片描述
每个变量左侧的图标表示其类型:

  • 数组 :数组

  • primitive :原始类型

  • 值 :对象

监视(Watches)

Watches 面板 中,你可以在当前调用栈帧的上下文中评估任意数量的变量或表达式。每当程序执行到下一步时,这些表达式的值都会自动更新,并在程序暂停时显示出来。

在这里插入图片描述

虽然你可以通过 Variables 面板 的右键菜单使用 “Evaluate Expression(评估表达式)” 来查看某一个表达式的值,但 Watches 面板 可以同时显示多个表达式,并且在多个调试会话之间保持不变,直到你主动删除它们。

你可以通过以下方式添加监视表达式:

  • Watches 面板 中直接添加
  • Variables 面板 中右键添加
  • 在编辑器中选中表达式并添加

所有监视表达式都会在当前选中的调用栈帧(Frames 面板)的上下文中进行评估。

如果某个表达式无法被评估,其值会显示为问号 ?

默认情况下,Watches 面板是隐藏的,此时监视表达式会直接显示在 Variables 面板 中。

如果你希望 Watches 面板单独显示:

  1. 点击调试工具栏中的 Layout Settings(布局设置) 按钮
  2. 选择 Separate Watches(分离显示监视面板)

这样就能将监视表达式独立显示,便于统一查看和管理。

表达式求值字段(Evaluate expression field)

要评估任意表达式,只需在 Watches 面板 中的 表达式求值字段 输入表达式并按下 Enter 键。

结果会立即显示在下方。你还可以点击输入框右侧的图标,将该表达式添加到监视列表中。

在这里插入图片描述

工具栏(Toolbar)

项目

快捷键

描述

新建监视按钮

插入

点击此按钮以创建新监视。

移除监视按钮

Delete

点击此按钮以从列表中移除选定的监视。

上移监视按钮 下移监视按钮

Alt0 Alt0

使用这些按钮更改监视的顺序。

复制监视按钮

Ctrl0D

使用此按钮创建选定监视的副本。

在变量选项卡中显示监视

在变量选项卡中显示监视

使用此切换按钮隐藏或显示 监视 窗格。 默认情况下,该按钮被按下并显示在 变量 窗格的工具栏上。 因此, 监视 窗格被隐藏,监视显示在 变量窗格 中。

  • 要单独显示 监视 窗格并在其中查看已配置的监视,请释放 在变量选项卡中显示监视 切换按钮。 监视 窗格会显示,并在工具栏上带有 在变量选项卡中显示监视 切换按钮。

  • 要隐藏 监视 窗格并在 变量 窗格中查看监视,请按 在变量选项卡中显示监视 切换按钮,该按钮位于 监视 窗格的工具栏上。 切换按钮返回到 变量 窗格工具栏上的默认位置。

右键菜单(Context menu)
项目快捷键描述
新建监视(New Watch)选择此命令以创建一个新的监视表达式。将打开一个文本字段用于输入新的表达式。
删除监视(Remove Watch)Delete删除当前选中的监视表达式。
编辑(Edit)F2修改当前选中的监视表达式。
删除所有监视(Remove All Watches)删除列表中的所有监视表达式。
检查(Inspect)可用于字段、局部变量和引用表达式,打开一个非模态的检查窗口,用于专注查看特定引用。你可以打开任意数量的检查窗口。窗口视图与 Watches 面板一致,但占用空间更少。
显示引用对象(Show Referring Object)显示引用当前监视表达式的所有对象列表。
复制值(Copy Value)Ctrl + C复制选中变量的值到剪贴板。如果选中多个项,不仅会复制变量值,还会复制其结构(类似调试器的树形结构),粘贴到文本文件时有良好缩进格式。
也可以将鼠标悬停在值上,在工具提示中查看内容。
复制 JSON(Copy JSON)仅适用于 JavaScript 环境,将选中的值以 JSON 格式复制。
与剪贴板比较值(Compare Value with Clipboard)将当前值与剪贴板中的值进行比较。
复制名称(Copy Name)将选中变量的名称复制到剪贴板。
计算表达式(Evaluate Expression)Alt + F8在弹出的对话框中计算所选变量的表达式。
添加到监视(Add to Watches)可用于除静态节点外的所有节点。创建一个引用该节点的表达式并添加到 Watches 面板中。
显示引用对象(Show Referring Objects)显示当前选中变量被哪些对象引用。
跳转到源代码(Jump to Source)F4在编辑器中打开该变量或字段的源代码,并将光标定位到对应的行。
跳转到类型定义(Jump to Type Source)F4跳转到所选变量或字段所属类的定义处。
以其他格式查看(View as)设置变量值的显示方式。对于整数类型,可选择二进制、十进制或十六进制:
- Hex:十六进制显示
- Binary:二进制字面量显示
以数组查看(View as Array)适用于 NumPy 数组类型的变量。需确保 Python 解释器中已安装 NumPy。也可以点击变量旁的 “View as Array” 链接。
以图像查看(View as Image)适用于 1D/2D/3D 的 NumPy 数组变量。需确保已安装 NumPy 和 Pillow。
以数据表查看(View as DataFrame)适用于 pandas 数据框类型变量。需确保已安装 pandas。也可以点击变量旁的 “View as DataFrame” 链接。

调试过程

断点

断点是特殊的标记,用于在程序执行到特定位置时暂停运行。这样你就可以检查程序的状态和行为。断点可以很简单,比如程序执行到某一行代码时暂停;也可以更复杂,比如根据额外条件判断是否暂停、写入日志等操作。

在这里插入图片描述
设置断点后,它会一直保留在你的项目中,除非你主动删除它,临时断点除外。

如果包含断点的文件被外部修改(例如通过版本控制系统更新或在外部编辑器中更改),且行号发生了变化,断点会相应地自动调整位置。请注意,此类更改发生时,PyCharm 必须处于运行状态,否则这些更改将不会被检测到。

断点类型

PyCharm 支持以下几种断点类型:

  • 行断点:程序执行到设置断点的代码行时暂停。此类型断点可以设置在任何可执行的代码行上。

  • 异常断点:当抛出 Exception 或其子类时暂停程序。在 PyCharm 中,你可以为 Python 异常设置断点。对于 PyCharm Professional 版,还支持 Django、Jinja2、JavaScript 和 Jupyter 的异常断点。这些断点对异常条件全局生效,不需要特定的源码位置。与仅查看堆栈跟踪不同,异常断点暂停程序时,可以让你在异常上下文或数据仍然可用时进行检查。

设置断点

  1. 设置行断点:

    点击可执行代码行的装订区域,设置断点。 或者,将文本光标放在行上并按下 CtrlF8

    在这里插入图片描述

  2. 设置异常断点

    1. CtrlShiftF8 或从主菜单中选择 运行 | 查看断点

    2. 断点 对话框中,按 AltInsert 或单击 "添加"按钮 ,并选择 Python 异常断点JavaScript 异常断点

      在这里插入图片描述

管理断点

  1. 移除断点

    • 对于非异常断点,断点位于边栏中。

    • 对于所有断点:转到主菜单中的 运行 | 查看断点 CtrlShiftF8 ,选择断点,然后点击 移除移除 或按 Delete

    在这里插入图片描述

  2. 静音断点:如果您暂时不需要在断点处暂停,可以将其 静音。 这使您能够在不离开调试器会话的情况下恢复正常程序操作。 之后,您可以取消静音断点并继续调试。

    点击 静音断点 按钮 静音断点按钮调试 工具窗口的工具栏中。

    在这里插入图片描述

  3. 启用/禁用断点,当您移除断点时,其 内部配置会丢失。 若要在不丢失断点参数的情况下暂时关闭单个断点,您可以 disable 它:

    对于非异常断点:右键点击并根据需要设置 已启用 选项。 您还可以用中键切换它们,如果移除断点没有 assigned 到它。

    对所有断点:点击 运行 | 查看断点 CtrlShiftF8 ,然后在列表中选中/取消选中断点。

    在这里插入图片描述

断点图标

根据它们的 类型和 状态 ,中断点会被标记以下图标:

异常

常规

行断点

异常断点

已禁用

禁用行断点

禁用异常断点

已验证

已验证行断点

静音

静音行断点

非活动/依赖

不活跃/从属行断点

静音已禁用

已禁用的行断点

非挂起

非挂起行断点

已验证的非挂起

已验证的非挂起行断点

无效

无效断点

启动调试器会话

启动调试器会话与以正常模式运行程序非常相似。 调试器在后台附加,因此您无需配置任何特定内容即可开始调试会话。 如果您能够从 PyCharm 运行您的程序,您也可以使用相同的配置对其进行调试。

在这里插入图片描述

检查挂起的程序

在调试器会话 启动后, Debug工具窗口会出现,程序会正常运行,直到发生以下情况之一:

  • 触发了一个 breakpoint

  • 手动 暂停程序

之后,程序将被挂起,允许用户检查其当前状态、控制其进一步执行并在运行时测试各种场景。


程序的状态由 frames表示。 当程序暂停时,当前的帧堆栈将显示在 帧 选项卡中的 调试 工具窗口内。

在这里插入图片描述
帧对应于活动的方法或函数调用。 它存储了被调用方法或函数的局部变量、其参数以及使表达式求值成为可能的代码上下文。

每次调用 方法 时,都会在栈顶新增一个帧。 当 方法 的执行完成时,相应的帧将从堆栈中移除(最后一个进,最先一个出)。

检查帧有助于您了解为什么特定参数被传递给方法,以及调用者在调用时的状态。


变量 选项卡显示所选 帧/线程中的变量列表。 检查变量可以帮助您理解程序为何以某种方式运行。

在这里插入图片描述
如果您想测试程序在特定数据下的行为或在运行时更改其流程,可以通过更改变量值来实现。

  1. 选择一个变量并按 F2。 或者,从上下文菜单中选择 设置值

  2. 请输入变量的值然后按 Enter

在这里插入图片描述


PyCharm 允许您在调试会话中评估表达式,以获取有关程序状态的更多详细信息或在运行时测试各种执行场景。

此功能仅在程序在命中断点后暂停(而非 暂停 )时有效。

指向您要计算的表达式。 表达式的结果显示在工具提示中。

在这里插入图片描述

逐步执行程序

PyCharm 提供了一组单步操作,具体使用取决于您的策略,例如您是需要直接跳到下一行还是检查中间的方法调用。

在这里插入图片描述

使用 PyCharm 进行远程调试

使用 PyCharm,你可以通过位于另一台计算机上的解释器调试你的应用程序,例如,位于 Web 服务器或专用测试机上。

PyCharm 提供两种远程调试方式:

  1. 通过远程解释器

    • 适用场景:利用远程机器上更强大的调试功能。
    • 要求:本地机器需通过 SSH 访问远程服务器。
  2. 使用 Python 远程调试服务器配置

    • 适用场景:将调试过程集成到远程服务器上的多个运行进程中。当你无法显式启动应用程序进行调试,或者需要进行某些准备工作时,这种方式非常有用。
    • 要求:本地机器需通过 SSH 访问远程服务器,且远程服务器需能通过任意预定义端口访问本地机器。

在此示例中,运行您的应用程序的机器被称为 local ,而具有远程解释器的机器被称为 remote。

配置远程解释器:

  1. 确保您可以通过 SSH 访问远程机器。

  2. 按照 使用 SSH 配置解释器 中的描述,为项目添加一个新的远程解释器,并指定连接到远程机器的凭据。

  3. 一旦为您的项目创建了远程解释器,相应的部署配置也会被创建。 要预览它,请按 CtrlAlt0S 打开本地机器上的 设置 对话窗口,然后转到 构建、执行、部署 | 部署

    部署配置
  4. 您可以接受所有默认设置,或者根据需要进行更改。 在此示例中,我们将使用 MySFTPConnection 作为部署配置的名称。

  5. 确保 根路径 值反映了在创建的 SSH 解释器的相应设置中指定的路径。

    CtrlAlt0S 打开设置并转到 项目 | Python Interpreter。 展开可用解释器列表,选择 全部显示… ,然后点击 显示一个解释器路径。 所选解释器的现有路径会显示在 解释器路径 对话框中。

    路径映射验证

将您的应用程序部署到远程主机:

  1. 工具 菜单中,选择 部署 | 上传到 MySFTPConnection

  2. 文件传输 工具窗口出现。 验证传输文件的数量。

    文件传输窗口

查看调试输出。 请注意,调试实际上是在指定的远程服务器上进行的。

使用调试控制台

调试控制台使您能够查看输出和错误消息。

默认情况下,控制台是交互式的。 它将显示提示,您可以使用代码补全执行命令。

在这里插入图片描述
您可以通过点击 显示调试控制台 来禁用此行为。

在控制台中,您可以:

  • 输入命令并按 Enter 执行它们。 结果会显示在同一个控制台中。

  • 使用 基本代码补全 CtrlSpace 和 Tab 补全。

  • 运行 asyncio 协程。

  • 使用 00 浏览命令历史记录,并执行所需的命令。

  • 从编辑器加载源代码到控制台。

  • 使用上下文菜单将控制台内容复制到剪贴板,与剪贴板进行比较,或清除控制台。

  • 使用 工具栏按钮来控制您在控制台中的会话。

尾声

写到这里,其实我们已经把 PyCharm 的调试功能基本过了一遍。无论是最基础的断点设置、变量观察,还是更高级的表达式求值、远程调试、查看引用对象等功能,PyCharm 都提供了非常直观且强大的工具来支持日常开发中的调试工作。

可能一开始你会觉得这些窗口和按钮有点多、有点乱,但只要你真正开始用起来,比如在调不通的代码上打个断点、一步步查看变量值,慢慢你就会意识到这些工具有多香。不用满屏 print(),不用瞎猜代码在哪出错,整个调试过程就像在看一部代码的“慢动作电影”,每一帧都能掌控。

更别说远程调试这个能力了,对于需要部署到服务器、或者跑在 Docker、虚拟机里的项目来说,它简直就是救命稻草。配置好一次之后,你就可以像本地调试一样去控制远程代码的执行,非常方便。

总之,如果你平时写 Python 项目,尤其是中大型项目,强烈建议把 PyCharm 的调试工具真正用起来。会调试,远比只会写代码更重要,它能帮你节省大量排查 bug 的时间,也能让你对程序的执行流程有更深的理解。希望这篇文章能帮你更快上手,也欢迎你继续去探索更多好用的小技巧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93561.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93561.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/93561.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用于前列腺活检分级的分层视觉 Transformer:迈向弥合泛化差距|文献速递-医学影像算法文献分享

Title题目Hierarchical Vision Transformers for prostate biopsy grading: Towardsbridging the generalization gap用于前列腺活检分级的分层视觉 Transformer:迈向弥合泛化差距01文献速递介绍前列腺癌是全球男性中第二常见的确诊癌症,也是第五大致命癌…

Apple基础(Xcode②-Flutter结构解析)

🏗️ 目录结构速查表(your_project/ios/ 下)ios/ ├── Runner/ ← 原生 iOS 工程根目录(Xcode 打开它) │ ├── AppDelegate.swift ← App 入口(类似 Android 的 MainActivity&…

X00229-基于深度强化学习的车联网资源分配python完整

X00229-基于深度强化学习的车联网资源分配python完整

面向多模态自监督学习的共享表示与独有表示解耦

通俗说法:在多模态自监督学习中,将共享信息和独有信息分离开来 Abstract 问题: 传统方法通常假设在训练和推理阶段都可以访问所有模态信息,这在实际应用中面对模态不完整输入时会导致性能显著下降。 解决方法:提出了一…

【iOS】weak修饰符

前言前面我们已经学习了解了sideTable,今天来看看在OC中,sideTable是如何在我们使用weak时工作的。在OC中,weak修饰符是一种用于声明“弱引用”的关键字,其核心特性是不参与对象的引用计数管理,而且当被引用的对象被释…

【JVM篇10】:三种垃圾回收算法对比详解

文章目录1. 标记-清除算法2. 复制算法3. 标记-整理算法总结与面试要点在通过 可达性分析等算法识别出所有存活对象和垃圾对象后,垃圾收集器(GC:Garbage Collector)就需要执行回收操作来释放垃圾对象所占用的内存。以下是三种最基础…

JXD进步25.7.30

1.为啥是update,因为你if判断有问题。或者是你上来就给id赋值了。2. 这个是清空network历史3.断点位置打在这里:打在上面它进不来4.

Flutter开发实战之网络请求与数据处理

第6章:网络请求与数据处理 “数据是应用的血液,网络是连接世界的桥梁。” 在移动应用开发中,与服务器进行数据交互是必不可少的功能。无论是获取用户信息、提交表单数据,还是上传图片、下载文件,都离不开网络请求。本章将带你深入掌握Flutter中的网络编程技巧。 6.1 网络…

快速分页实现热点功能-索引和order by

需求:分页求出进三天的发布视频的权重热度 权重 / 衰减时间 衰减时间 当前时间 - 视频发布时间 小根堆来实现这个公式可以很好的利用半衰期来进行解决难点:如果一次性加载太多到springBoot服务器里面会造成堆内存占用过多,分页又有可能造成深分页问题,…

HAProxy(高可用性代理)

1 HAProxy 简介 HAProxy( High Availability Proxy)是一个高性能的负载均衡器和代理服务器,为基于 TCP 和 HTTP 的应用程序提供高可用性、负载平衡和代理,广泛应用于提高 web 应用程序的性能和可靠性。它支持多种协议&#xff0c…

Vulnhub靶场:ica1

一、信息收集nmap扫描一下IP。(扫不出来的可以看一下前面几篇找ip的步骤)下面给了框架的版本是9.2的,我们去kali里搜一下有没有已经公开的漏洞。searchsploit qdPM 9.2 locate 50176.txt more /usr/share/exploitdb/exploits/php/webapps/50…

【Dv3admin】ORM数据库无法查询的问题

Django 运行过程中,数据库连接的健康状态直接影响应用的稳定性和数据访问准确性。长时间空闲的数据库连接经常因外部机制被回收,进而引发数据查询异常和返回无效结果。 本文围绕 Django 中数据库连接长时间空闲导致的连接失效问题,介绍相关的…

使用 Flownex 对机械呼吸机进行建模

当患者无法独立呼吸时,机械呼吸机通过气管插管将富氧空气输送到患者的肺部。肺是敏感而复杂的器官,因此在无法忍受的压力和体积范围内提供空气,根据每分钟所需的呼吸次数计时,并适当加湿和加热。机械呼吸机的精确建模对于其安全有…

力扣刷题日常(7-8)

力扣刷题日常(7-8) 第7题: 整数反转(难度: 中等) 原题: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0. 假设环境不允许存储 64 位整数(有符号或无符号).…

串口接收数据包(协议带帧头帧尾)的编程实现方法:1、数据包格式定义结构体2、使用队列进行数据接收、校验解包

这种带帧头帧尾的数据包处理流程可以简单概括为 “识别边界→提取有效数据→验证完整性” 三个核心步骤,具体操作如下:1. 数据包格式定义(先约定规则)首先明确一个 “合格数据包” 的结构,比如: 帧头&#…

JSON 对象封装教程

JSON 对象封装方法在 Java 中封装 JSON 对象通常使用第三方库&#xff0c;如 org.json、Gson 或 Jackson。以下是几种常见的方法&#xff1a;使用 org.json 库添加 Maven 依赖&#xff1a;<dependency><groupId>org.json</groupId><artifactId>json<…

【WRF-Chem】EDGAR 排放数据处理:分部门合并转化为二进制(Python全代码)

目录 process.py process_biofl.py process_fossil.py process_micro.py process_sector.py 参考 process.py 读取 EDGAR 排放数据库中 2000 至 2023 年间不同行业的甲烷(CH₄)排放数据,进行合并处理,并将总排放以二进制格式保存到文件中。 导入必要的库 import numpy as n…

【学习过程记录】【czsc】1、安装

文章目录 背景 安装 安装python 安装czsc 功能测试 附录 奇葩的报错 背景 详见: https://github.com/waditu/czsc 安装 安装python !重要!作者强调,python必须是大于等于3.8 为此呢,我也是花了一点时间装了一个python3.13。 安装czsc 关于czsc的安装呢,官方也是给出…

Python批量生成N天前的多word个文件,并根据excel统计数据,修改word模板,合并多个word文件

1&#xff0c;需求 根据word模板文件&#xff0c;生成多个带日期后缀的word文件根据excel-每日告警统计数量&#xff0c;逐个修改当日的文档2&#xff0c;实现 shell脚本&#xff1a;根据word模板文件&#xff0c;生成多个带日期后缀的word文件 #!/bin/bash # 生成近一年日期 …

基于uni-app的血糖血压刻度滑动控件

想要做一个基于uni-app的血糖血压刻度滑动控件&#xff0c;hbuilder市场没有好的&#xff0c;参照别人的写了一个。如图&#xff1a;源码&#xff0c;自己放入components里面。<!-- 刻度滑动选择 --> <template><view><view class"slide-title"…