chatGPT 中确实能有一些很实用的代码实现,让俺耳目一新,为之震撼。
width=10001
height=10000
step_size=5000
x_tiles = (width + step_size - 1) // step_size
y_tiles = (height + step_size - 1) // step_size
x_tiles, y_tiles
输出:
(3, 2)
width=10001
height=10000
overlap = 500
title_size = 5000
step_size=title_size-overlap
x_tiles = (width + step_size - 1) // step_size
y_tiles = (height + step_size - 1) // step_size
x_tiles,y_tiles
输出:
(3, 3)
在使用 pdb.set_trace()
进入调试模式后,除了之前提到的常用命令,Python 调试器 pdb
还提供了许多其他有用的命令。以下是一些常用的 pdb
命令及其功能:
-
n
(next):- 执行下一行代码,不会进入函数内部。
-
s
(step):- 逐步执行,进入函数内部。
-
c
(continue):- 继续执行程序,直到遇到下一个断点或程序结束。
-
p [变量名]
:- 打印变量的值。
-
q
(quit):- 退出调试模式,程序终止。
-
l
(list):- 列出当前执行位置附近的代码,显示当前文件的代码上下文。
-
h
或help
:- 显示帮助信息,或输入
help [命令]
查看特定命令的帮助文档。
- 显示帮助信息,或输入
-
b [行号]
或b [文件名]:[行号]
(break):- 设置断点。可以在当前文件的某一行,或在指定文件的某一行设置断点。
- 例如:
b 10
在当前文件的第 10 行设置断点,b myfile.py:20
在myfile.py
文件的第 20 行设置断点。
-
cl [断点编号]
(clear):- 清除指定断点,也可以直接输入
cl
来清除所有断点。
- 清除指定断点,也可以直接输入
-
tbreak [行号]
(temporary break):- 设置一个临时断点,程序执行到此断点时会暂停,但断点在触发一次后自动删除。
-
w
(where) 或bt
(backtrace):- 显示当前的调用堆栈,可以帮助查看代码执行到当前行之前的调用过程。
-
u
(up) 和d
(down):- 在调用栈中向上(
u
)或向下(d
)移动,以查看不同层级的堆栈帧中的代码和变量。
- 在调用栈中向上(
-
j [行号]
(jump):- 改变当前执行的行号,让程序从指定的行继续执行。这不会执行跳跃之间的代码,慎用。
-
disable [断点编号]
:- 禁用某个断点,输入
disable
可禁用所有断点。
- 禁用某个断点,输入
-
enable [断点编号]
:- 重新启用一个断点。
-
! [表达式]
:- 执行 Python 表达式或语句。例如,
!x = 10
会直接修改x
变量的值。
- 执行 Python 表达式或语句。例如,
-
a
(args):- 打印当前函数的参数列表及其值。
-
retval
:- 打印最近一个返回值,显示最后执行的函数返回的值。
-
display [表达式]
:- 自动显示表达式的值,每次进入调试模式时都会自动显示指定的表达式结果。
- 例如:
display x
,在每次代码停顿时自动打印x
的值。
-
undisplay [编号]
:- 取消自动显示。编号是通过
display
命令设置的。
- 取消自动显示。编号是通过
-
r
(return):- 执行到当前函数返回为止。
- 调试过程中修改代码:在
pdb
中,你可以修改变量的值或执行任意 Python 代码,这对于动态修复代码问题很有用。 - 条件断点:使用
b [行号], [条件]
可以设置条件断点。只有条件满足时程序才会暂停。例如,b 15, x == 5
表示在第 15 行,只有当x == 5
时才会暂停程序。
这些命令能帮助你更高效地调试代码,灵活排查程序中的问题。
取消自动显示。编号是通过 display 命令设置的。 r (return):
执行到当前函数返回为止。
参考链接:https://blog.csdn.net/weixin_49131823/article/details/132392072
import pdb
直接在代码里需要调试的地方放一个pdb.set_trace()
n 执行下一条语句
w where 打印当前执行堆栈
d down 执行跳转到在当前堆栈的深一层
u up 执行跳转到当前堆栈的上一层
b break 添加断点
tbreak:(temporary break)临时断点
在第一次执行到这个断点之后,就自动删除这个断点,用法和b一样
cl clear 清楚断点
disable:停用断点,参数为bpnumber,和cl的区别是,断点依然存在,只是不启用
enable:激活断点,参数为bpnumber
s step 执行下一条命令 如果本句是函数调用,则s会执行到函数的第一句
r return 执行当前运行函数到结束
c continue 继续执行,直到遇到下一条断点
l list 列出源码 看下面代码
longlist 所有源吗
ll 查看当前函数的代码
a args 列出当前执行函数的函数
run 重新启动debug 相当于restart
q quit 退出debug
j jump 设置下条执行的语句函数 只能在堆栈的最底层跳转,向后重新执行,向前可直接执行到行号
unt:(until)执行到下一行(跳出循环),或者当前堆栈结束
conditon,给断点设置条件,当参数condition返回True的时候bpnumber断点有效,否则bpnumber断点无效
直接输入Enter,会执行上一条命令;
直接使用 p 变量名 查看值 print
pp 好看一点的 打印
bt 调用查看的堆栈
alias 查看所有命令别名和对应命令 相当于配置 ls 为 l
unalias 取消命名
whatis 查看类型
where 查看所在的位置
interact 启用交互式解释器
retval 打印函数的最后一次返回的返回值。
source 尝试获取给定对象的源代码并显示它。
display 每次在当前帧中停止执行时,显示表达式的值
undisplay 在当前帧中不再显示该表达式。如果没有表达式,请清除当前帧的所有显示表达式。
debug 输入一个递归调试器,它逐步遍历code参数(这是要在当前环境中执行的任意表达式或语句)。
ignore 设置给定断点号的忽略计数。如果忽略count,则忽略计数将设置为0。当忽略计数为零时,断点将变为活动状态。如果为非零值,则每次达到断点且不禁用断点时,计数都会递减,并且任何关联条件的评估结果为true。
commands 为断点设置一个新条件,该表达式必须在接受断点之前求值为true。如果条件不存在,任何现有的条件被移除; 即,将断点设为无条件