在Java/ c#中,您可以很容易地逐级检查代码以跟踪可能出错的地方,而IDE使这个过程对用户非常友好。
你能以类似的方式跟踪python代码吗?
在Java/ c#中,您可以很容易地逐级检查代码以跟踪可能出错的地方,而IDE使这个过程对用户非常友好。
你能以类似的方式跟踪python代码吗?
当前回答
Python导师是一个为新手设计的在线单步调试器。您可以在编辑页面上输入代码,然后单击“可视化执行”开始运行。
除其他外,它支持:
隐藏变量,例如,隐藏一个名为x的变量,把这个放在最后: # pythontutor_hide: x 保存/共享 其他一些语言,如Java, JS, Ruby, C, c++
然而,它也不支持很多东西,例如:
读取/写入文件-使用io。StringIO和io。取而代之的是BytesIO: demo 代码太大,运行时间太长,或者定义了太多的变量或对象 命令行参数 很多标准库模块,如argparse, csv, enum, html, os, sys, weakref… Python 3.7 +
其他回答
目前已有breakpoint()方法,用于替换import pdb;pdb.set_trace()。
它还有几个新特性,比如可能的环境变量。
使用Python交互式调试器'pdb'
第一步是使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.从你的程序内部
对于大项目和长时间运行的模块,可以从程序内部使用启动调试 导入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()
逐步调试进入更内部
Execute the next statement… with “n” (next) Repeating the last debugging command… with ENTER Quitting it all… with “q” (quit) Printing the value of variables… with “p” (print) a) p a Turning off the (Pdb) prompt… with “c” (continue) Seeing where you are… with “l” (list) Stepping into subroutines… with “s” (step into) Continuing… but just to the end of the current subroutine… with “r” (return) Assign a new value a) !b = "B" Set a breakpoint a) break linenumber b) break functionname c) break filename:linenumber Temporary breakpoint a) tbreak linenumber Conditional breakpoint a) break linenumber, condition
注意:**所有这些命令都应该在**pdb中执行
更深入的了解请参考:-
https://pymotw.com/2/pdb/
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
从Python 3.7开始,你可以使用breakpoint()内置函数进入调试器:
foo()
breakpoint() # drop into the debugger at this point
bar()
默认情况下,breakpoint()将导入pdb并调用pdb.set_trace()。但是,你可以通过sys.breakpointhook()和使用环境变量PYTHONBREAKPOINT来控制调试行为。
有关更多信息,请参阅PEP 553。
https://wiki.python.org/moin/PythonDebuggingTools
Pudb是PDB的一个很好的替代品
通过python代码进行编程步进和跟踪也是可能的(而且很简单!)查看sys.settrace()文档了解更多细节。这里也有一个教程让你开始。