只是一个方便的问题.我在Visual Studio和XCode等IDE中使用调试器有点被宠坏了.我发现必须键入import pdb; pdb.set_trace()设置断点有点笨拙(我宁愿不在文件顶部导入pdb,因为我可能会忘记并将其保留).
是否有一种更简单的方法在Python代码中设置断点,与您在IDE中看到的一样简单明了?
mde*_*ous 111
您可以pdb通过运行从命令行运行程序
python -m pdb your_script.py
它将在第1行中断,然后您将能够使用该break命令在代码中的任何位置添加断点,其语法为:
b(reak)[[filename:] lineno | 功能[,条件]]
它足够灵活,可以在任何地方添加断点.
Apo*_*tus 55
您可以使用:
from pdb import set_trace as bp
code
code
bp()
code
code
Run Code Online (Sandbox Code Playgroud)
Dan*_*iel 34
在vim中,我为此设置了一个宏(在我的.vimrc文件中):
map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>
Run Code Online (Sandbox Code Playgroud)
所以我可以按\ b(当不在插入模式时)并在当前行之后添加断点,或者\ B(注意大写)并在当前行之前放置一个.
这似乎工作正常.大多数其他"简单"程序员编辑器(emacs,sublimetext等)应该有类似的简单方法来执行此操作.
编辑: 我实际上有:
au FileType python map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
au FileType python map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>
Run Code Online (Sandbox Code Playgroud)
它只为python源文件打开它.您可以非常轻松地为javascript或您使用的任何其他语言添加类似的行.
AXO*_*AXO 26
如果您不想在每次运行程序时手动设置断点(在Python 3.2+中),例如,假设您要在第3行直接创建断点并在那里停止执行:
python -m pdb -c "b 3" -c c your_script.py
以下信息可能有所帮助:
如果文件.pdbrc存在于用户的主目录或当前目录中,则会将其读入并执行,就好像它已在调试器提示符下键入一样.这对于别名特别有用.如果两个文件都存在,则首先读取主目录中的文件,并且可以由本地文件覆盖定义的别名.
版本3.2中已更改:.pdbrc现在可以包含继续调试的命令,例如continue或next.以前,这些命令没有任何效果.
版本3.2中的新增功能:pdb.py现在接受一个-c选项,该选项执行命令,就像在.pdbrc文件中一样,请参阅调试器命令.
Bil*_*ill 18
我还没有尝试过,但他们只是在Python 3.7中实现了一个名为breakpoint()的新内置,这意味着你现在可以用一个语句插入一个断点:
breakpoint()
Run Code Online (Sandbox Code Playgroud)
pic*_*e 涅 10
这就是你如何在命令行中使用pdb而不在源代码中实现任何东西(文档和其他在线资源不能很好地向过去只使用过可视调试器的程序员解释这个):
通过在shell提示符下键入以下内容来启动pdb:
python -m pdb 'python_script'
Run Code Online (Sandbox Code Playgroud)
此命令初始化pdb,pdb调试器将在python_script的第一行中断并等待您的输入:
(Pdb)
Run Code Online (Sandbox Code Playgroud)
这是与调试器通信的接口.现在,您可以在此处指定命令.反对在可视调试器中使用按钮或键盘快捷键,在这里您将使用命令来获得相同的结果.
您可以通过命令"n"(下一步)转到代码中的下一行:
(Pdb) n
Run Code Online (Sandbox Code Playgroud)
执行next将显示行号,以及源中的特定代码:
> python_script(line number)method name
-> current line in the source code
Run Code Online (Sandbox Code Playgroud)
您可以通过在源代码中指定行号来设置断点.
(Pdb) b 50
Run Code Online (Sandbox Code Playgroud)
这里,调试器设置为在第50行中断.如果没有任何其他断点,则第50行的断点将是第一个断点,并且它可以由断点id引用,在这种情况下为1.如果添加更多断点,它们将按顺序获取标识符(即2,3等)
设置断点后,您将继续执行程序,直到pdb到达断点,如下所示:
(Pdb) c
Run Code Online (Sandbox Code Playgroud)
一旦到达断点,您可以使用前面描述的n命令转到下一行.如果要检查变量的值,可以按如下方式执行参数命令:
(Pdb) p variable_name
Run Code Online (Sandbox Code Playgroud)
如果您不再需要断点,可以通过使用clear命令传入断点的id来清除它:
(Pdb) clear 1
Run Code Online (Sandbox Code Playgroud)
最后,当您完成调试器后,您可以退出执行,就像退出python命令行解释器一样.
(Pdb) exit()
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助任何人开始使用pdb.以下是可以与调试器一起使用的命令列表:pdb所以问题和答案
您可以使用支持Python调试的IDE,或者您可以查看优秀的Winpdb工具。它适用于任何平台,并为您的 python 脚本提供图形调试工具。