使用ipdb调试python项目

前提

之前我调试python代码或者是项目的时候,用的都是print来进行各种调试,这样显然不太方便(尤其是在处理python项目的时候)。于是我找到了ipdb这个工具,它能帮助你更方便的、像C++一样逐行调试代码。

使用

  1. 安装:相当简单,pip install ipdb即可。

  2. 进入调试模式:

    1
    python -m ipdb project.py
  3. 常用命令:

    字母 意义
    b breakpoint,给程序某一行打断点,例如b breakpoint_num
    c 让程序运行到第一个断点那里
    n next,单步运行下一行代码(不进入函数)
    s step,单步运行下一行代码(进入函数)
    q quit,退出调试器并终止程序
    l 查看位置附近的代码
    p print,打印变量的值
    h help,查看帮助信息,例如h command_name
    u 向上移动一层调用栈
    d 向下移动一层调用栈
  4. 另一种打断点方式:在要打断点的地方的上一行写上

    1
    2
    import ipdb
    ipdb.set_trace()

    这样打断点的方式比较适合在有很多文件的python项目里面进行调试。

接下来就让我们实战一下吧!

例子

下面是一道leetcode的算法题题解,我们来利用ipdb调试它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def maxArea(self, height):
l, r = 0, len(height) - 1
ans = 0
while l < r:
area = min(height[l], height[r]) * (r - l)
ans = max(ans, area)
if height[l] <= height[r]: l += 1
else: r -= 1
return ans

print(123)
solution = Solution()
height = [1, 8, 6, 2, 5, 4, 8, 3, 7]
max_water_area = solution.maxArea(height)
print(max_water_area)

输入python -m ipdb project.py开始调试。

  1. 首先我们的断点要设在第15行,所以有两种办法:
  • 在命令行输入b 10
  • 在源代码中第15行加上ipdb.set_trace(),如下:
    1
    2
    3
    4
    height = [1, 8, 6, 2, 5, 4, 8, 3, 7]
    import ipdb
    ipdb.set_trace()
    max_water_area = solution.maxArea(height)
  1. 让程序运行到断点所在位置,指令为c;
  2. 让调试进入类的内部,指令为s;
  3. 在类内部调试,指令为n+ENTER,查看变量area的值,指令为p area;
  4. q退出调试。

使用ipdb调试python项目
https://kingdom-of-warriors.github.io/2024/08/18/使用ipdb调试python项目/
作者
Rayy
发布于
2024年8月18日
许可协议