使用debug查看循环里的变量值

当在Python代码中无法通过print函数查看循环内变量的详细信息时,可以利用PyCharm的断点和调试功能进行检查。首先,在需要查看变量的代码行前设置断点。然后,通过右键菜单选择调试模式运行代码。当代码执行到断点处时,程序会暂停,此时可以直接在变量查看器中观察变量h的形状和其他隐藏信息,而无需反复运行代码。

项目场景:

提示:这里简述项目相关背景:

如何查看循环里的变量值

即使使用paycharm的pyhton控制台也无法查看到的那些隐藏的变量值, 如何使用断点和debug查看

问题描述:

跑代码时,有些变量,我没法查看到,使用print,每次我都要重新跑
例如,我想查看中间变量h的形状:
代码如下:

else:
    # If MLP
    print('x.size', x.size)
    h = x
    for i in range(self.num_layers - 1):
        print('h', h)

结果:
h.size <built-in method size of Tensor object at 0x0000021B7C7E7C80>
没法看到其形状,我们使用的python控制台也无法查看到
在这里插入图片描述


解决方案:

使用断点和debug来查看

1. 打断点

找到需要查看得变量所在代码前的行标,在行标和代码层中间用鼠标左键点一下,出现红色圆,即为打上断点。
在这里插入图片描述

2.调试代码

鼠标右键菜单,选择调试
在这里插入图片描述

3.查看

代码会自动在断点处结束
直接找到,就是了
在控制台无法查看的,点击下面就由大小
在这里插入图片描述
在这里插入图片描述

参考链接:

强烈推荐去原文查看,实用度比我高很多,我的笔记只是用来做自己以后回顾所用。
Pycharm如何打断点
https://www.cnblogs.com/my_captain/p/9242640.html
例图:
在这里插入图片描述

在 PyCharm 中调试时,查看**前一步的变量值**(即执行上一步前的变量状态)需要结合调试器的 **"Frame"(调用栈)** 和 **"Variables"(变量面板)** 功能。以下是具体方法: --- ### **方法1:通过调用栈回退到上一步(推荐)** 1. **暂停程序**(在断点处停止或手动暂停)。 2. 在 **Debug 工具栏** 点击 **"Show Execution Point"**(黄色箭头图标)确保焦点在当前执行点。 3. 在 **"Frames" 面板**(通常在调试窗口左侧): - 选择 **调用栈中的上一步(父帧)**(例如,从 `current_function` 回退到 `caller_function`)。 - 此时 **"Variables" 面板** 会自动显示该帧的变量状态(即执行到上一步时的值)。 ![PyCharm Frame 回退](https://resources.jetbrains.com/help/img/idea/2023.3/debugger_frames.png) 4. **注意**: - 回退到父帧后,不能直接继续执行(需手动返回当前帧)。 - 变量值是**只读**的,不能修改历史状态。 --- ### **方法2:使用 "Drop Frame" 重放上一步(谨慎操作)** 1. 在 **"Frames" 面板** 右键点击当前帧。 2. 选择 **"Drop Frame"**(丢弃当前帧): - 程序会**回退到上一步的调用点**,重新进入该函数。 - **"Variables" 面板** 会显示回退后的变量值(相当于时间倒流)。 3. **警告**: - 此操作会**丢失当前帧之后的执行状态**(如副作用、文件写入等)。 - 仅适用于纯函数调试,慎用! --- ### **方法3:手动记录变量历史(适用于简单场景)** 如果提前预判需要回溯变量,可以在代码中添加**快照**: ```python # 在关键步骤前保存变量状态 var_history = [] var_history.append({"x": x, "y": y}) # 手动记录 ``` 调试时通过 **"Evaluate Expression"**(`Alt+F8`)查看 `var_history`。 --- ### **方法4:使用条件断点 + 日志** 1. 右键断点 → 设置 **"Condition"** 或 **"Log Message"**: ```python # 条件断点中打印变量历史 print(f"Previous x: {x}") # 自动输出到调试控制台 False # 条件设为 False 确保暂停(如需继续运行则改为 True) ``` 2. 在 **"Debug Console"** 中查看输出的历史值。 --- ### **总结** | 方法 | 适用场景 | 注意事项 | |--------------------|----------------------------------|----------------------------------| | **调用栈回退** | 查看父帧的变量状态(推荐) | 不能修改历史值 | | **Drop Frame** | 重放上一步执行(高风险) | 会丢失后续状态 | | **手动记录快照** | 需精确追踪变量变化 | 需提前修改代码 | | **条件断点 + 日志**| 无需回退,仅记录历史 | 输出可能冗长 | --- ### **常见问题** 1. **为什么回退后变量值不变?** - PyCharm 的调试器是**非时间旅行**的,回退调用栈仅能查看静态历史状态,不能动态还原内存。 2. **如何查看循环中的上一步值?** - 在循环体内设置断点,通过 **"Step Over"(F8)** 逐步执行,观察每次迭代的变量变化。 3. **能否自动记录所有变量历史?** - 需要借助插件(如 **PyCharm Historical Debugger**)或第三方库(如 `icecream`),但会增加性能开销。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值