断点调试,是编写程序中一个很重要的步骤,有些简单的程序使用print语句就可看出问题,而比较复杂的程序,函数和变量较多的情况下,这时候就需要打断点了,更容易定位问题。
一、添加断点
在代码的行标前面,左键单击,会出现一个红色圆点图标
二、调试断点
有两种方法:
1、在代码区域,鼠标右键,选中Debug开始调试(推荐)
2、点击代码区域右上角的虫子图标
注意选择正确的文件,在虫子图标的左侧,如选错了,就是给其他文件Debug了
开始进入Debug调试模式后,程序会运行到第一个断点,可以在代码后面或者Debugger工具面板查看变量值。
三、Debugger窗口各图标的含义
1、Show Execution Point (Alt + F10)
作用是定位当前执行点,在调试过程中,代码可能会在多个断点之间跳转,或者通过函数调用进入不同的代码块,使用"Show Execution Point"功能,可以方便地看到当前正在执行的代码行,而无需手动滚动代码窗口。
2、Step Over(F8)
调试过程中,如果想逐行执行代码并查看每一行的执行结果,但不希望进入函数调用的内部代码,而是直接执行完整个函数并跳过它 ,就可以使用它,在不存在子函数的情况下是和Step Into效果一样的(简而言之,越过子函数,但子函数会执行)
举个例子,有以下Python代码,设置断点, 点击 Debugger 窗口的 "Step Over" 按钮(或按下 F8 键) ,可以看到没有进入multiply(a,y)函数,直接计算出product_result的值了。
3、Step Into (F7)
单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数)。
举个例子,有以下Python代码,设置断点, 点击 Debugger 窗口的 "Step Into" 按钮(或按下 F7 键) ,可以看到进入multiply(a,y)函数了。
4、Step Into My Code(Alt + Shift + F7)
进入自己编写的函数,但不进入系统函数,很少用到。
5、Force Step Into(Alt + Shift + F7)
强制进入,在调试的时候能进入任何方法, 它允许你在遇到多个可以进入的函数调用时,自行选择要进入的函数,而不是按照默认的逐层进入顺序。
举个例子, 有以下Python代码,假设你在调试模式下启动了这段代码,并在 sum_result = add(num1, num2) 这一行设置了断点。当代码停在这个断点处时,你可以点击 Debugger 窗口的 "Step Into" 按钮(或按下 F7 键)来进入 add() 函数的内部。
现在,如果你想进入 divide(product_result, num2) 这个函数调用的内部,你可以在 Debugger 窗口中右键点击 divide 这一行,然后选择 "Force Step Into"。这将会强制 Debugger 跳过 multiply() 函数内部的逐行执行,直接进入 divide() 函数内部。
6、Step Out( Shift + F8)
当单步执行到子函数内时,用Step Out就可以执行完子函数余下部分,并返回到上一层函数。 "Step Over" 是逐行执行并忽略函数内部的操作,而 "Step Out" 是从当前函数内部退出并继续执行到调用点的操作。
举个例子,有以下Python代码,在sum_result = add(num1, num2)处打断点,代码执行进入add函数后,点击Step Out,直接跳出add函数,但是还是会计算出sum_result的值。
7、Run to Cursor( Alt + F9)
一直执行,到光标处停止,用在循环内部时,点击一次就执行一个循环。它是一个非常实用的功能,可以帮助你快速运行代码片段,跳过不必要的中间步骤,以及在你只关心特定部分的情况下更高效地进行调试。
举个例子,有以下Python代码,假设你在调试模式下启动了这段代码,并在 num1 = 5 这一行设置了断点。现在,如果你想要跳过 add(num1, num2) 函数调用的逐步执行,直接执行到 print("Sum:", sum_result) 这一行,你可以在该行上右键点击,然后选择 "Run to Cursor"。
这将会让程序在当前位置直接运行,直到光标所在的位置。在这个例子中,它将跳过 add() 函数的内部执行,直接执行到 print("Sum:", sum_result) 这一行,然后停止。
8、Evaluate Expression ( Alt + F8)
计算表达式。 这个功能对于查看变量、计算表达式、验证假设以及调试代码时的实时观察非常有帮助,可以动态地在断点处计算和查看不同表达式的值,更好地理解代码在不同步骤的状态,以及发现潜在的问题。
举个例子,有以下Python代码,假设你在调试模式下启动了这段代码,并在 sum_result = add(num1, num2) 这一行设置了断点。当代码停在这个断点处时,你可以使用 "Evaluate Expression" 功能来计算和查看一些表达式的值。
例如,你可以在调试器的窗口中找到 "Evaluate Expression" 输入框,然后输入表达式 num1 + num2 并点击 "Evaluate" 按钮。这将会计算 num1 和 num2 的和,然后显示结果。
9、Return XXX(Ctrl + F5)
重新运行程序,会关闭服务后重新启动程序。
10、Resume Program (F9)
允许你从一个断点处恢复程序的执行,跳过你不想逐步检查的部分,以便你能够更快地观察代码的整体行为。
比如,你在第20行和26行有两个断点,当前运行至第20行,按F9,则运行到下一个断点(即第26行),再按F9,则运行完整个流程,因为后面已经没有断点了。
11、Pause Program
暂停程序,启用Debug, 以便能够检查当前的状态、变量的值,或者观察代码的执行情况,完成了查看和调试操作后,可以继续执行程序,通常是通过点击调试器工具栏上的 "Resume Program"(通常是一个绿色的三角形图标)来恢复程序的执行 。
12、Stop 'xxx' (Ctrl + F2)
允许立即停止程序的执行和调试会话,适用于需要立即中止调试过程的情况。有时候会发现关闭服务再启动时,报端口被占用,这是因为没完全关闭服务的原因,这个时候就需要查杀所有JVM进程了。
13、View Breakpoints (Ctrl + Shift + F8)
能够查看和管理代码中设置的断点,帮助更好地进行调试和观察程序的执行流程。
14、Mute Breakpoints
一次性临时禁用所有断点,而不必逐个去禁用每个断点 ,在不删除断点的情况下,暂时停止断点的触发,以便在某些特定情况下进行调试或测试时非常有用。
选择这个后,所有断点变为灰色,断点失效,按F9则可以直接运行完程序。再次点击,断点变为红色,有效。
今天的分享就到这里,下期见~