Python原生调试工具pdb实践小结
使用python -m pdb xxx.py
进入单步调试模式,默认会在脚本的第一行可执行命令处停止。此时,通过 b function
设置之后的函数断点会提示出错,从出错异常栈中可以看出,pdb是将function
当做行号来识别,而函数名是字符串,转换成整形会失败,因此会提示出错。在处理转换整形失败异常时,会尝试执行 function
,如果当前解析器还执行到该函数(由于是刚开始调试,相关函数尚未解析),那么在该函数上设置断点又会触发异常。那么,通过单步调试,如何开始呢?
经过多番尝试,总结这样的工程实践经验,在单步进入时,先通过 b lineno
设置为期望调试的入口行号后,按c
运行至此处,然后,通过b function
设置后续的函数断点,设置的function
要求已经过解释器解释过的。这可能是pdb单步调试的缺陷。
还有一种侵入式的调试方式就是在源代码中导入pdb模块,在需要设置断点的地方手动加上 pdb.set_trace()
,通过python xx.py
命令启动程序后,可直接执行到断点处,然后再单步调试下去。这样对源代码有侵入性,不怎么友好。