试图找到如何执行ipdb(或pdb)命令,如disable.
调用h命令disable说
disable bpnumber [bpnumber ...]禁用以空格分隔的bp数列表给出的断点.
那么我怎么得到这些bp数字?正在查看命令列表,无法显示bp数字
[编辑]
的break,b并info breakpoints命令不会做任何事,虽然我的模块中我已清楚1个断点设置这样的import pdb; pdb.set_trace( )-同样为ipdb.而且info没有定义.
的输出help中pdb:
记录命令(类型帮助):======================================== EOF bt cont enable jump pp run un ac继续退出lqs直到别名cl dh
list退出步骤args clear debug help n
r tbreak wb命令disable ignore next restart u whatis break condition down jp
return unalias where其他帮助主题:========================== exec pdb
未记载的命令:====================== retval rv
并为ipdb:
记录命令(类型帮助):======================================== EOF bt cont启用跳转pdef …
是否有可能安装ipdb(或其他一些编写来明确地执行此操作的程序包)将导致breakpoint()运行ipdb而不是pdb而不绑定sys.breakpointhook()到ipdb?
https://www.python.org/dev/peps/pep-0553/
我不是在问ipdb是否会这样做,或者是否会这样做,但是如果它可以编码那么.我知道我可以设置环境变量PYTHONBREAKPOINT=ipdb.set_trace.问题是,是否可以通过安装来触发此行为ipdb.
我已经使用Plain调试了python脚本大约2年了from IPython import embed; embed(),并且运行良好。我只是将命令放在要检查的行上,并且在运行脚本时,我将拥有完整的IPython Shell,具有检查变量,定义函数等的能力。最重要的是,IPython Shell附带了变量名制表符。
现在,from IPython import embed; embed()我不再像总是用定义“暂停行” ,而是让我的python脚本在运行测试时遇到异常时暂停执行。
您如何pytest以这种方式运行,
# test_somemodule.py
def test_me(some_variable):
x = 1 + some_variable
return x
test_me('I am a string')
Run Code Online (Sandbox Code Playgroud)
(不,您不必像这样为pytest编写测试,但是出于示例目的,这很好。)
pytest --pdb(未pdbpp安装)pdb遇到错误时,这将打开基本外壳程序。但是它没有制表符补全。
-> x = 1 + some_variable
(Pdb) so[<tab_here_produces_tab>]
Run Code Online (Sandbox Code Playgroud)
pytest --pdb(与 pdbpp安装)pdbpp遇到错误时,这将打开基本外壳程序。但是没有制表符补全。
-> x = 1 …Run Code Online (Sandbox Code Playgroud) 我正在使用Jupyter(IPython)笔记本,其中pdb/ipdb运行良好,除了一个问题:如果我在pdb模式下意外运行我的pdb所在的同一个单元格,输出消失,整个笔记本卡住了我无法再运行任何命令.我也试过打断或重启内核; 不起作用.我唯一的选择是关闭笔记本电脑,然后重新启动它.
有没有其他人遇到这个问题/知道解决方案?我每次犯这个错误都要重新启动笔记本电脑非常烦人.
以下是问题的屏幕截图.下面我按照预期的pdb模式:
如果我(不小心)运行我的pdb所在的同一个单元格,那么笔记本会在尝试运行该单元格时遇到困难,并且不会运行任何其他单元格(如下面的单元格).
当我尝试安装时ipdb,我遇到了以下问题:
$ pip install ipdb
Collecting ipdb
Using cached ipdb-0.10.3.tar.gz
Complete output from command python setup.py egg_info:
error in ipdb setup command: Invalid environment marker: python_version >= "3.3"
Run Code Online (Sandbox Code Playgroud)
如何ipdb以最简单的方式安装?
(我使用macOS Sierra 10.12.4,virtualenv 1.11.6,python 2.7.10,pip 9.0.1)
在Python调试器中是否可以await任意调用async函数?
说我在某些main.py文件中有以下代码:
import asyncio
async def bar(x):
return x + 1
async def foo():
import ipdb; ipdb.set_trace()
asyncio.run(foo())
Run Code Online (Sandbox Code Playgroud)
现在,我想bar()在调试器中测试带有某些参数的调用以测试结果。发生以下情况:
$ python3 main.py
> /Users/user/test/main.py(8)foo()
7 import ipdb; ipdb.set_trace()
----> 8 return None
9
ipdb> bar(1)
<coroutine object bar at 0x10404ae60>
main.py:1: RuntimeWarning: coroutine 'bar' was never awaited
import asyncio
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
ipdb> await bar(1)
*** SyntaxError: 'await' outside function
Run Code Online (Sandbox Code Playgroud)
当然,我可以通过在自己的x = await bar(1)之上 …
Python(和 ipython)具有非常强大的事后调试功能,允许在回溯的每个范围内进行变量检查和命令执行。up/down 调试器命令允许更改最终异常的堆栈跟踪的帧,但是__cause__按照raise ... from ... 语法定义的那个异常呢?
Python 3.7.6 (default, Jan 8 2020, 13:42:34)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.11.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: def foo():
...: bab = 42
...: raise TypeError
...:
In [2]: try:
...: foo()
...: except TypeError as err:
...: barz = 5
...: raise ValueError from err
...:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-dd046d7cece0> in <module>
1 try: …Run Code Online (Sandbox Code Playgroud) 标签完成对我有用:
In [84]: a="string"
In [85]: b = ["str", "ing"]
Run Code Online (Sandbox Code Playgroud)
字符串的标签完成在这里工作:
In [86]: a.
a.capitalize a.decode a.expandtabs a.index a.isdigit a.istitle a.ljust a.partition a.rindex a.rsplit a.splitlines a.swapcase a.upper
a.center a.encode a.find a.isalnum a.islower a.isupper a.lower a.replace a.rjust a.rstrip a.startswith a.title a.zfill
a.count a.endswith a.format a.isalpha a.isspace a.join a.lstrip a.rfind a.rpartition a.split a.strip a.translate
Run Code Online (Sandbox Code Playgroud)
列表的标签完成在这里工作:
In [86]: b.
b.append b.count b.extend b.index b.insert b.pop b.remove b.reverse b.sort
Run Code Online (Sandbox Code Playgroud)
字符串的标签完成在这里不起作用:
In [87]: b[0].
Run Code Online (Sandbox Code Playgroud)
一种可能的解决方法:
In [88]: c = b[0]
In [89]: c.
c.capitalize c.decode …Run Code Online (Sandbox Code Playgroud) 我有一个生产代码,大量使用asyncio.semaphore模块,怀疑有死锁问题.我已经找到了一些解决方案,如何使用unix信号附加到运行python代码,调试ipdb.set_trace()并列出事件循环中的所有任务asyncio.Task.all_tasks().我可以进一步检查每个任务的堆栈框架,还是查看当前正在等待的各个协程路线ipdb?
想象一下,我正在调试以下脚本:
import ipdb
def slow_function(something):
# I'm a very slow function
return something_else
def fast_function(something_else):
# There's a bug here
return final_output
something = 1
something_else = slow_function(something)
ipdb.set_trace()
final_output = fast_function(something_else)
ipdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
当ipdb.set_trace()满足该行时,将提示调试器shell,现在我可以执行该final_output = fast_function(something_else)语句以检查是否fast_function按预期运行.我看到有一个bug,所以我进入源代码并修复它.现在我想看看修复是否正确但我不想第二次运行脚本(因为它很慢),也不想保存something_else在磁盘上(因为它可能非常大).
有没有办法在调试器shell中更新fast_function(),以便使用新的源代码?
ipdb ×10
python ×9
debugging ×4
pdb ×4
ipython ×3
python-3.x ×3
asynchronous ×1
autocomplete ×1
breakpoints ×1
jupyter ×1
pip ×1
pytest ×1
python-2.7 ×1
python-3.7 ×1
semaphore ×1
virtualenv ×1