在 Java/C# 中,您可以轻松地逐步执行代码以跟踪可能出现的问题,而 IDE 使此过程非常用户友好。
你能以类似的方式跟踪 python 代码吗?
原文由 Blankman 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Java/C# 中,您可以轻松地逐步执行代码以跟踪可能出现的问题,而 IDE 使此过程非常用户友好。
你能以类似的方式跟踪 python 代码吗?
原文由 Blankman 发布,翻译遵循 CC BY-SA 4.0 许可协议
第一步是让 Python 解释器进入调试模式。
A. 从命令行
最直接的方式,从命令行运行,python 解释器
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
B. 在解释器中
在开发模块的早期版本并进行更多迭代试验时。
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)
C. 从你的程序中
对于大型项目和长时间运行的模块,可以使用 import pdb 和 set_trace() 从程序内部开始调试,如下所示:
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __name__ == '__main__':
MyObj(5).go()
逐步调试以进入更多内部
执行下一条语句……使用 “n” (下一个)
重复上一个调试命令…使用 ENTER
退出一切……用 “q” (退出)
打印变量的值……用“p”(打印)
一) 帕
关闭 (Pdb) 提示符……使用 “c” (继续)
查看您的位置……使用 “l” (列表)
进入子程序……用 “s” (进入)
继续……但只是到当前子程序的结尾……用 “r” (返回)
分配一个新值
一) !乙=“乙”
设置断点
a) 断行号
b) 中断函数名
c) 中断文件名:行号
临时断点
a) tbreak 行号
条件断点
a) 断行号、条件
注意:**所有这些命令都应该从 **pdb 执行
如需深入了解,请参阅:-
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
原文由 akD 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答854 阅读✓ 已解决
是的!有一个名为
pdb
的 Python 调试器 — 就是为了这样做!您可以使用
pdb myscript.py
或python -m pdb myscript.py
通过pdb
启动 Python 程序。然后您可以发出一些命令,这些命令记录在
pdb
页面上。要记住的一些有用的是:
b
: 设置断点c
: 继续调试直到遇到断点s
:单步执行代码n
:转到下一行代码l
: 列出当前文件的源代码(默认:11 行,包括正在执行的行)u
:向上导航堆栈框架d
:向下导航堆栈框架p
: 打印当前上下文中表达式的值如果您不想使用命令行调试器,一些 IDE,如 Pydev 、 Wing IDE 或 PyCharm 有一个 GUI 调试器。 Wing 和 PyCharm 是商业产品,但 Wing 有免费的“个人”版,而 PyCharm 有免费的社区版。