show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次重新定义 了 函数sorry
- 通过输出 明确程序执行过程
- 调试的时候
- 还有哪些命令呢??🤔
- 当播放头运行到函数调用的这一句的时候
- 按下step或者s
- 意思是步进
-
s 和 n
- 只有在当前行有函数的时候才不一样
- s 是
- step into
- 步进
- 进入函数
- n 是
- step over
- 步过
- 跳过函数
-
step into
- 进入了被调用的函数当中
- 一步步调试执行
- 那怎么知道我究竟在哪呢?
- bt和w(here) 都对应着
print_stack_trace
- w(here) 查询当前播放头所在位置
- w可以告诉我,我在哪!!!
- bt的意思是bottom 看的也是当前位置
- w(here) 查询当前播放头所在位置
- PrintStackTrace
- 输出调用栈信息
- 这个就是函数堆栈的样子
- 是一层层函数调用的关系
- 怎么理解呢?
- 这个堆栈总共分成四层
- 最下面的红色部分
- 是堆栈的顶
- print("都是我不好")
- 是sorry函数中第4行
- 是当前帧(Frame)正在执行的代码
- 谁调用sorry函数的呢?
- 向上一层的绿色部分
- sorry()
- 调用了sorry函数
- sorry.py中的第8行()
- 谁调用的sorry.py呢?
- 再向上一层的蓝色部分
- exec(cmd,globals,locals)
- 调用了sorry.py
- 谁调用了exec函数呢?
- 最上层的紫色部分
- pdb.py(580行)的run函数
- 是调用堆栈(Stack)的底
- 一起都是从这里出发开始的
- 函数就是这样层层调用的
- step进去后可以进函数内部调试
- 出了错也是一层层地找到位置
- 比如
- 我们试图打开一个不存在的文件的时候
- 明明只出了一个错误
- 为什么给我这么多行提示?
- 因为报错输出了跟踪(Traceback)的过程
- 错误发生在一个我们自己写的open函数调用的位置
- 是open函数的层层调用时候执行的一句
- 离我们对于open函数的调用很远
- 要一层层地跟踪(Traceback)
- 找到我们代码的错误位置和类型
- 调试的时候可以强制跳出函数么?
- 函数运行完了会自动返回
- r和return就是返回
- 跳出当前函数
- 返回到调用他的那一层
- 试试
- 红圈里面的r直接跳出函数
- r代表return
- 把函数内部的345句都执行完了
- 然后返回到改执行第9句的位置
- 第9句跳出后返回到调用这个sorry.py的位置
- 这样就可以
- 深入函数
- 跳出函数了
- 这次我们调试了自己定义的函数sorry
- 调试有这样一些命令
- step
- 步进到函数里面
- 和 next步过 不同
- 和 continue继续到下个断点 也不同
- 跳入当前行所在函数
- 步进到函数里面
- return
- 跳出当前函数回到调用的位置
- where
- 告诉我现在执行到了哪里
- 当前播放头的程序栈位置
- step
- 有了这样一些命令
- 我们就可以更好地调试python程序了
- 我们生活中也会遇到这些套路吗?🤔
- 我们下次再说!👋