调试Python代码
最后修改时间:2023 年 9 月 6 日准备一个例子
你还记得数学课上的二次公式吗?该公式也称为 A、B、C 公式,用于求解一个简单的二次方程:ax2 + bx + c = 0
。由于手动求解二次公式很快就会变得无聊,让我们用脚本代替它。
将以下代码复制到项目中的文件中(尽管建议手动键入此代码):
import math
class Solver:
def demo(self, a, b, c):
d = b ** 2 - 4 * a * c
if d > 0:
disc = math.sqrt(d)
root1 = (-b + disc) / (2 * a)
root2 = (-b - disc) / (2 * a)
return root1, root2
elif d == 0:
return -b / (2 * a)
else:
return "This equation has no roots"
if __name__ == '__main__':
solver = Solver()
while True:
a = int(input("a: "))
b = int(input("b: "))
c = int(input("c: "))
result = solver.demo(a, b, c)
print(result)
正如你所看到的,这里有一个main
子句。这意味着执行将从它开始,让您输入所需的变量a
、b
和值c
,然后输入方法demo
。
放置断点
要放置断点,只需单击您希望应用程序暂停的行旁边的装订线:

有关更多信息,请参阅断点。
启动调试器会话
现在好了,我们已经添加了断点,一切都准备好进行调试了。
IntelliJ IDEA 允许以多种方式启动调试器会话。让我们选择一个:单击装订线,然后在打开的弹出菜单中选择命令“调试‘求解器’” :

调试器启动,显示“调试”工具窗口的“控制台”选项卡,并让您输入所需的值:

调试器在第一个断点处暂停程序。这意味着带有断点的行尚未执行。该线变为蓝色:

顺便说一句,当程序暂停时,您可以在调试控制台中输入Python命令:

在 “调试器”选项卡的单步工具栏上,单击“恢复程序”按钮以移至下一个断点。
内联调试
在编辑器中,您可以在代码行旁边看到斜体文本:

这是什么意思?
这是所谓的内联调试的结果 。在本例中,它显示了您输入的对象的地址和变量Solver
的值。a
b
c
可以 关闭内联调试。
请注意,您可以在调试器会话过程中执行此操作!
我们迈步吧!
因此,您已经单击了按钮,现在看到蓝色标记移动到下一个断点。
如果您使用 步进工具栏按钮,您将移至下一行。例如,单击( Step Over ) 按钮。由于启用了内联调试,变量的值在编辑器中以斜体显示。

现在在第 24 行 ( ) 设置另一个断点b = int(input("b: "))
,然后再次单击。新的周期开始。
a
在调试控制台中提供 的值。调试器将在断点处停止。
如果单击( Step Into ) 按钮,您将看到在该行之后
a = int(input("a: "))
调试器进入文件parse.py:

如果您想专注于自己的代码,请使用(单步执行我的代码)按钮 - 这样您就可以避免单步执行库类。
观看
IntelliJ IDEA 允许您观察变量。切换到“线程和变量”选项卡,然后键入要监视的变量的名称。请注意,代码补全可用:

首先,您会看到一个错误 - 这意味着该变量尚未定义:

但是,当程序执行继续到定义变量的范围时,手表将获得以下视图:

您可以使用同一字段来计算表达式。
更改小数变量的格式
在 IntelliJ IDEA 调试器中,您可以预览int
十六进制或二进制格式的变量。当您调试包含二进制协议的网络脚本时,这可能特别有用。
要更改显示格式,请在“变量”int
列表中选择一个或多个变量,单击鼠标右键,然后选择“查看为”|“变量”。上下文菜单中的十六进制。

变量的格式在变量列表和编辑器中都会发生变化。

概括
这个简短的教程结束了 - 恭喜!让我们重复一下您从中学到的内容:
您已经刷新了对断点的了解并学会了如何放置它们。
您已经了解了如何开始调试器会话,以及如何在调试器控制台中显示 Java 提示符。
您已经刷新了有关内联调试的知识。
您已经尝试过步进、观察和评估表达式。
感谢您的反馈意见!