调试的测试程序
import pdb import sys def add(num1=0, num2=0): print('add') return int(num1) + int(num2) def main(): print(sys.argv) pdb.set_trace() # 添加断点 addition = add(sys.argv[1], sys.argv[2]) print(addition) if __name__ == '__main__': main()
注释:由于segmentfault限制了pre的height,为了可读所以分为两部分截取
使用pdb单步调试step进入add函数内部后为什么会出现两条相同的return int(num1) + int(num2)
语句?
$ python test.py 1 2 ['test.py', '1', '2'] > /home/testenv/test.py(9)main() -> addition = add(sys.argv[1], sys.argv[2]) (Pdb) s # step into add function --Call-- > /home/testenv/test.py(3)add() -> def add(num1=0, num2=0): (Pdb) n > /home/testenv/test.py(4)add() -> print('add') (Pdb) n add > /home/testenv/test.py(5)add() -> return int(num1) + int(num2) (Pdb) n --Return-- > /home/testenv/test.py(5)add()->3 -> return int(num1) + int(num2)
下面也出现了两条相同的print语句,只是一条是main()
,另外一条是main()->None
。而且print(addition)后程序不是应该退出吗?为什么最后
还要回到main才能退出?
(Pdb) n > /home/testenv/test.py(10)main() -> print(addition) (Pdb) n 3 --Return-- > /home/testenv/test.py(10)main()->None -> print(addition) (Pdb) n --Return-- > /home/testenv/test.py(12)()->None -> main() (Pdb) n 退出成功
Google 搜索 「Power pdb user」
看完+稍微实践, 你就能精通pdb
PS: 官方关于 pdb 的文档, 我觉得内容太少, 根本没有把pdb给介绍清楚