在Java/ c#中,您可以很容易地逐级检查代码以跟踪可能出错的地方,而IDE使这个过程对用户非常友好。
你能以类似的方式跟踪python代码吗?
在Java/ c#中,您可以很容易地逐级检查代码以跟踪可能出错的地方,而IDE使这个过程对用户非常友好。
你能以类似的方式跟踪python代码吗?
当前回答
ipdb (IPython调试器)
ipdb在pdb中添加了IPython功能,提供了以下巨大的改进:
选项卡完成 显示更多的上下文行 语法高亮显示
就像pdg一样,如果与GDB相比,ipdb还远远不够完美和完全初级,但它已经比pdb有了巨大的改进。
用法类似于pdb,只需安装它:
python3 -m pip install --user ipdb
然后添加到你想要进行步进调试的行:
__import__('ipdb').set_trace(context=21)
你可能想从你的编辑器中添加一个快捷方式,例如,对于Vim snipmate我有:
snippet ipd
__import__('ipdb').set_trace(context=21)
所以我可以输入ipd<tab>,它扩展到断点。然后使用dd很容易删除它,因为所有内容都包含在一行中。
context=21增加上下文行数,如调试时如何使ipdb显示更多的上下文行所述?
或者,你也可以从一开始调试程序:
ipdb3 main.py
但你通常不想这样做,因为:
在Python读取这些行时,你必须遍历所有函数和类的定义 我不知道如何在不入侵ipdb的情况下设置上下文大小。补丁允许:https://github.com/gotcha/ipdb/pull/155
或者,就像在raw pdb 3.2+中一样,你可以从命令行设置一些断点:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
尽管-c c因为某些原因被破坏了:https://github.com/gotcha/ipdb/issues/156
如何调试从命令行使用python -m运行的python模块?因为Python 3.7可以用:
python -m pdb -m my_module
与GDB相比,pdb和ipdb的特性严重缺失:
持久化命令历史跨会话:保存命令历史在pdb中
Ipdb具体烦恼:
多线程不能很好地工作,如果你不hack一些设置… ipdb,多线程和自动重载程序导致ProgrammingError https://github.com/gotcha/ipdb/issues/51
在Ubuntu 16.04中测试,ipdb==0.11, Python 3.5.2。
其他回答
ipdb (IPython调试器)
ipdb在pdb中添加了IPython功能,提供了以下巨大的改进:
选项卡完成 显示更多的上下文行 语法高亮显示
就像pdg一样,如果与GDB相比,ipdb还远远不够完美和完全初级,但它已经比pdb有了巨大的改进。
用法类似于pdb,只需安装它:
python3 -m pip install --user ipdb
然后添加到你想要进行步进调试的行:
__import__('ipdb').set_trace(context=21)
你可能想从你的编辑器中添加一个快捷方式,例如,对于Vim snipmate我有:
snippet ipd
__import__('ipdb').set_trace(context=21)
所以我可以输入ipd<tab>,它扩展到断点。然后使用dd很容易删除它,因为所有内容都包含在一行中。
context=21增加上下文行数,如调试时如何使ipdb显示更多的上下文行所述?
或者,你也可以从一开始调试程序:
ipdb3 main.py
但你通常不想这样做,因为:
在Python读取这些行时,你必须遍历所有函数和类的定义 我不知道如何在不入侵ipdb的情况下设置上下文大小。补丁允许:https://github.com/gotcha/ipdb/pull/155
或者,就像在raw pdb 3.2+中一样,你可以从命令行设置一些断点:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
尽管-c c因为某些原因被破坏了:https://github.com/gotcha/ipdb/issues/156
如何调试从命令行使用python -m运行的python模块?因为Python 3.7可以用:
python -m pdb -m my_module
与GDB相比,pdb和ipdb的特性严重缺失:
持久化命令历史跨会话:保存命令历史在pdb中
Ipdb具体烦恼:
多线程不能很好地工作,如果你不hack一些设置… ipdb,多线程和自动重载程序导致ProgrammingError https://github.com/gotcha/ipdb/issues/51
在Ubuntu 16.04中测试,ipdb==0.11, Python 3.5.2。
从Python 3.7开始,你可以使用breakpoint()内置函数进入调试器:
foo()
breakpoint() # drop into the debugger at this point
bar()
默认情况下,breakpoint()将导入pdb并调用pdb.set_trace()。但是,你可以通过sys.breakpointhook()和使用环境变量PYTHONBREAKPOINT来控制调试行为。
有关更多信息,请参阅PEP 553。
在python中有一个叫做'pdb'的模块。在python脚本的顶部
import pdb
pdb.set_trace()
然后进入调试模式。您可以使用's'步进,'n'跟随下一行,类似于使用'gdb'调试器。
是的!有一个名为pdb的Python调试器就是用来做这件事的!
可以使用pdb myscript.py或Python -m pdb myscript.py通过pdb启动Python程序。
然后可以发出一些命令,这些命令都记录在pdb页面上。
要记住的一些有用的方法是:
B:设置断点 C:继续调试,直到遇到断点 学生:按步骤执行代码 N:转到下一行代码 L:列出当前文件的源代码(默认为11行,包括正在执行的行) U:向上导航堆栈帧 D:向下浏览堆栈帧 P:在当前上下文中输出表达式的值
如果你不想使用命令行调试器,一些IDE,如Pydev, Wing IDE或PyCharm有一个GUI调试器。Wing和PyCharm都是商业产品,但Wing有一个免费的“个人”版本,PyCharm有一个免费的社区版本。
如果你有Java/ c#背景,我猜你最好的选择是使用Eclipse和Pydev。这为您提供了一个内置调试器的功能齐全的IDE。我也用django。