标签: ipdb

如何在pdb(ipdb)中找到断点号?

试图找到如何执行ipdb(或pdb)命令,如disable.

调用h命令disable

disable bpnumber [bpnumber ...]禁用以空格分隔的bp数列表给出的断点.

那么我怎么得到这些bp数字?正在查看命令列表,无法显示bp数字

[编辑]break,binfo breakpoints命令不会做任何事,虽然我的模块中我已清楚1个断点设置这样的import pdb; pdb.set_trace( )-同样为ipdb.而且info没有定义.

的输出helppdb:

记录命令(类型帮助):======================================== 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 …

python breakpoints ipdb

10
推荐指数
1
解决办法
1981
查看次数

breakpoint()默认使用ipdb

是否有可能安装ipdb(或其他一些编写来明确地执行此操作的程序包)将导致breakpoint()运行ipdb而不是pdb而不绑定sys.breakpointhook()ipdb

https://www.python.org/dev/peps/pep-0553/

我不是在问ipdb是否会这样做,或者是否会这样做,但是如果它可以编码那么.我知道我可以设置环境变量PYTHONBREAKPOINT=ipdb.set_trace.问题是,是否可以通过安装来触发此行为ipdb.

python python-3.x ipdb python-3.7

10
推荐指数
1
解决办法
838
查看次数

如何使用带有选项卡完成功能的python调试器运行pytest?

背景

我已经使用Plain调试了python脚本大约2年了from IPython import embed; embed(),并且运行良好。我只是将命令放在要检查的行上,并且在运行脚本时,我将拥有完整的IPython Shell,具有检查变量,定义函数等的能力。最重要的是,IPython Shell附带了变量名制表符。

现在,from IPython import embed; embed()我不再像总是用定义“暂停行” ,而是让我的python脚本在运行测试时遇到异常时暂停执行。

您如何pytest以这种方式运行,

  1. 引发异常时,它将启动python调试器
  2. 该调试器是否具有变量名的制表符补全

设定

  • Windows 10
  • Python 3.6

简单的失败测试

# 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编写测试,但是出于示例目的,这很好。)

无效的解决方案

1. pytest --pdb(未pdbpp安装)

pdb遇到错误时,这将打开基本外壳程序。但是它没有制表符补全。

-> x = 1 + some_variable
(Pdb) so[<tab_here_produces_tab>]
Run Code Online (Sandbox Code Playgroud)

2. pytest --pdb pdbpp安装)

pdbpp遇到错误时,这将打开基本外壳程序。但是没有制表符补全。

-> x = 1 …
Run Code Online (Sandbox Code Playgroud)

python debugging pytest pdb ipdb

10
推荐指数
1
解决办法
662
查看次数

Jupyter笔记本陷入了pdb模式

我正在使用Jupyter(IPython)笔记本,其中pdb/ipdb运行良好,除了一个问题:如果我在pdb模式下意外运行我的pdb所在的同一个单元格,输出消失,整个笔记本卡住了我无法再运行任何命令.我也试过打断或重启内核; 不起作用.我唯一的选择是关闭笔记本电脑,然后重新启动它.

有没有其他人遇到这个问题/知道解决方案?我每次犯这个错误都要重新启动笔记本电脑非常烦人.

以下是问题的屏幕截图.下面我按照预期的pdb模式:

在此输入图像描述

如果我(不小心)运行我的pdb所在的同一个单元格,那么笔记本会在尝试运行该单元格时遇到困难,并且不会运行任何其他单元格(如下面的单元格).

在此输入图像描述

python ipython pdb ipdb jupyter-notebook

8
推荐指数
1
解决办法
1655
查看次数

使用virtualenv和pip安装ipdb for Python 2.7时出错

当我尝试安装时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 pip virtualenv python-2.7 ipdb

8
推荐指数
2
解决办法
3572
查看次数

等待Python调试器中的异步函数

在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 debugging asynchronous ipdb python-asyncio

8
推荐指数
2
解决办法
282
查看次数

如何在python中调试导致后续异常的堆栈跟踪?

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)

python ipython python-3.x pdb ipdb

8
推荐指数
1
解决办法
500
查看次数

在ipython中为列表元素完成选项卡

标签完成对我有用:

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)

python autocomplete ipython ipdb jupyter

7
推荐指数
1
解决办法
1491
查看次数

调试并列出将来在python asyncio中挂起的所有协同程序

我有一个生产代码,大量使用asyncio.semaphore模块,怀疑有死锁问题.我已经找到了一些解决方案,如何使用unix信号附加到运行python代码,调试ipdb.set_trace()并列出事件循环中的所有任务asyncio.Task.all_tasks().我可以进一步检查每个任务的堆栈框架,还是查看当前正在等待的各个协程路线ipdb

debugging semaphore python-3.x ipdb python-asyncio

7
推荐指数
1
解决办法
1311
查看次数

在调试期间更新函数(pdb或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(),以便使用新的源代码?

python debugging pdb ipdb

7
推荐指数
1
解决办法
774
查看次数