Python

1.Leetcode 383

Ch4 使用vscode连接开发机进行python debug

4.1 什么是debug?

当你刚开始学习Python编程时,可能会遇到代码不按预期运行的情况。这时,你就需要用到“debug”了。简单来说,“debug”就是能再程序中设置中断点并支持一行一行地运行代码,观测程序中变量的变化,然后找出并修正代码中的错误。而VSCode提供了一个非常方便的debug工具,可以帮助你更容易地找到和修复错误。

4.2 使用Vscode进行Python debug的流程

4.2.1 debug单个python文件

def range_sum(start,end):
    sum_res = 0
    for i in range(start,end):
        sum_res+=i
    return sum_res

if __name__ =="__main__":
    print(range_sum(1,10))

Step1.安装Python扩展

  • 打开VSCode,点击左侧扩展栏,搜索Python,并安装。

Step2配置调试

  • 打开你的Python文件,点击左侧活动栏的“运行和调试”图标。
  • 首次debug需要配置以下,点击“create a launch.json file”,选择python debugger后选择“Python File” config。

  • 可以直接编辑生成的launch.json文件,配置调试参数,比如添加config(Add Configuration)等。
  • 新建python文件后我们如果想要运行,首先需要选择解释器。单击右下角的select interpreter,vsconde会自动扫描开发机上所有的python环境中的解释器。

Step3.设置断点

在代码行号旁边点击,可以添加一个红点,这就是断点(如果不能添加红点需要检查一下Python扩展是否已经正确安装)。当代码运行到这里时,它会停下来,这样你就可以检查变量的值、执行步骤等。接下来,我们在第4行的核心代码处打上断点。

Step4.启动debug

点击VSCode侧边栏的“Run and Debug”(运行和调试),选择调试配置后,点击绿色箭头(开始调试)按钮,或者按F5键。

Step5.查看变量

当代码在断点处停下来时,你可以查看和修改变量的值。在“Run and Debug”侧边栏的“Variables”(变量)部分,你可以看到当前作用域内的所有变量及其值。

Step6.单步执行代码

你可以使用顶部的debug面板的按钮来单步执行代码。这样,你可以逐行运行代码,并查看每行代码执行后的效果。

debug面板各按钮功能介绍:

  1. continue: 继续运行到下一个断点。

  2. step over: 单步跳过,可以理解为运行当前行代码,不进入具体的函数或者方法。

  3. step into: 单步进入。如果当前行代码存在函数调用,则进入该函数内部。如果当前行代码没有函数调用,则等价于step over

  4. step out: 单步退出函数,返回到调用该函数的上一层代码。

  5. restart: 重新启动调试。

  6. stop: 终止调试。

Step7.修复错误并重新运行

如果你找到了代码中的错误,可以修复它,然后重新运行debug来确保问题已经被解决。

通过遵循以上步骤,你可以使用VSCode的debug功能来更容易地找到和修复你Python代码中的错误。可以自己编写一个简单的python脚本,并尝试使用debug来更好的理解代码的运行逻辑。记住,debug是编程中非常重要的一部分,所以不要怕花时间在这上面。随着时间的推移,你会变得越来越擅长它!

4.2.2 不同的断点

在调试(Debug)过程中,断点(Breakpoint)允许程序员在程序的执行流程中设置暂停点。当程序运行到这些断点时,执行会暂时中断,使得我们可以检查此时程序的状态,包括变量的值、内存的内容等。断点为我们提供了一个观察程序运行细节的机会,从而帮助我们定位和解决程序中的错误或问题。在VSCode中,我们还可以设置条件断点,这样断点只有在满足特定条件时才会触发。

  1. 普通断点:在代码行号左侧点击,添加断点。
  2. 条件断点:在断点标记上右键,选择条件断点(conditional breakpoint)。VSCode 中常用的条件断点主要有三种类型:
    1. 表达式(Expression):输入一个 Python 表达式,每次触发断点时运行该表达式,当表达式的值为 True 时 VS Code 会暂停执行。例如:x == 10
    2. 触发计数(Hit Count):断点触发计数达到输入值时才会暂停运行。
    3. 记录日志(Log Message):触发该断点时在 Debug Console 中输出指定信息,实际上就是 logpoint。需要输入要输出的信息,如果要用到表达式,可以使用 {} 将表达式括起来。例如,每次记录变量 i 的值可以写 x={i}
表达式条件断点

比如我们想让代码在 i=end-1 时停下来,可以这样设置: 在断点处右键选择“条件断点”,然后输入条件 i == end-1

回车保存断点,然后运行debug,可以看到程序在i=9的时候停了下来,此时各变量的值如下

触发计数条件断点

如果我们想让sum_res+=i在运行5次后停下来,我们可以在这行设置Hit count断点为5。

运行debug后,程序第一次暂停时各变量的状态为

记录日志条件断点

在Log Message输入 Current i is {i} 每次触发时记录一下 i 的值

运行debug后我们可以在终端面板的debug console看到

4.3 在vscode使用命令行进行debug

很多时候我们要debug的不止是一个简单的python文件,而是很多参数,参数中不止会有简单的值还可能有错综复杂的文件关系,甚至debug一整个项目。这种情况下,直接使用命令行来发起debug会是一个更好的选择。

4.3.1 vscode设置

vscode支持通过remote的方法连接我们在命令行中发起的debug server。首先我们要配置一下debug的config。

还是点击VSCode侧边栏的“Run and Debug”(运行和调试),单击"create a lauch.json file"

选择debugger时选择python debugger。选择debug config时选择remote attach就行,随后会让我们选择debug server的地址,因为我们是在本地debug,所以全都保持默认直接回车就可以了,也就是我们的server地址为 localhost:5678

配置完以后会打开配置的json文件,但这不是重点,可以关掉。这时我们会看到run and debug界面有变化,出现了debug选项。


注意:已经有配置好的json文件

如果有已经配置好的debug json配置文件,则需要在原json上增加配置。可以通过Run and Debug卡片左上角的下拉菜单单击Add configuration,或者点击设置按钮打开配置文件,在配置文件的右下角也会有一个Add configuration。剩下的步骤就和前面一样选择Python debugger-Remote attach,剩下的全都保持默认直接回车就可以了,也就是我们的server地址为 localhost:5678


4.3.2 debug命令行

现在vscode已经准备就绪,让我们来看看如何在命令行中发起debug。如果没有安装debugpy的话可以先通过pip install debugpy安装一下。

python -m debugpy --listen 5678 --wait-for-client ./myscript.py
  • ./myscript.py可以替换为我们想要debug的python文件,后面可以和直接在命令行中启动python一样跟上输入的参数。记得要先在想要debug的python文件打好断点并保存。

  • --wait-for-client参数会让我们的debug server在等客户端连入后才开始运行debug。在这就是要等到我们在run and debug界面启动debug。


注意: 在开发机上使用该debug方式运行的时候可能会报以下warning。此时,debug可能不能正常运行,需要按他提示的给python加上-Xfrozen_modules=off参数禁用冻结模块即可。

Debugger warning: It seems that frozen modules are being used, which may make the debugger miss breakpoints. Please pass -Xfrozen_modules=off to python to disable frozen modules.
python -m -Xfrozen_modules=off debugpy --listen 5678 --wait-for-client ./myscript.py

先在终端中发起debug server,然后再去vscode debug页面单击一下绿色箭头开启debug。

接下来的操作就和上面一样了。

4.3.3 使用别名简化命令

这边有个不方便的地方,python -m debugpy --listen 5678 --wait-for-client这个命令太长了,每次都打很麻烦。这里我们可以给这段常用的命令设置一个别名。

linux系统中,可以对 ~/.bashrc 文件中添加以下命令

alias pyd='python -m debugpy --wait-for-client --listen 5678'

然后执行

source ~/.bashrc

这样之后使用 pyd 命令(你可以自己命名) 替代 python 就能在命令行中起debug了,之前的debug命令就变成了

pyd ./myscript.py

在C语言中,直接评估一个是否值得深入交往通常涉及到主观判断,这并不适合用编程语言去实现,因为程序设计主要是处理数据和逻辑,而非情感分析。但是,你可以设计一些规则或算法来衡量朋友间的互动、共同兴趣等因素,然后通过用户输入的数据进行分析。 例如,你可以创建一个简单的命令行程序,其中包含几个变量来记录朋友的行为,如共享活动次数、互相帮助的情况等。然后编写函数对这些变量进行评分,并设置阈值来决定是否达到值得深交的程度。但这需要为设定规则,并非真正的智能决策。 以下是粗略的伪代码示例: ```c #include <stdio.h> // 定义友情分数结构体 typedef struct { int activity_score; int help_score; // ... 其他相关字段 } FriendshipScore; // 计算友谊得分函数 FriendshipScore calculateFriendship(int activities, int helps) { FriendshipScore score = {0}; score.activity_score = activities; score.help_score = helps; // ... 根据你的规则计算总分 return score; } int main() { int activities, helps; printf("请输入你们一起参与的活动次数:"); scanf("%d", &activities); printf("请输入你曾帮助过对方的次数:"); scanf("%d", &helps); FriendshipScore friendship = calculateFriendship(activities, helps); if (friendship.total_score >= MIN_DEEP_FRIENDSHIP_SCORE) { printf("这个值得你深入交往。\n"); } else { printf("这个可能还不足以成为深度朋友。\n"); } return 0; } ``` 请注意,这个例子仅作为理论上的说明,实际应用中你需要根据具体的评判标准来编写代码。而且,这并不是一种技术上可行的情感智能或社交网络分析,而更像是一个简单的用户输入处理程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值