标签: ipdb

ipython调试器:交互式pdb上的完全回溯?

我最近从ipython0.10切换到ipython0.11.在ipython0.11中,我只看到python调试器参与(即使用%pdb)时的完整回溯的一小段,而在ipython0.10中我会看到完整的回溯.据我所知,pdb命令行无法直接访问完整的回溯 - 您可以使用'u'浏览它,但无法直接看到它.

那么,有没有办法显示完整的追溯?比如配置参数?

或者,更有用的是,有没有办法让ipython只显示被捕获的异常,而不是显示它被捕获的代码中的位置?

编辑:示例:

In [1]: pdb
Automatic pdb calling has been turned ON

In [2]: 1/0
> <ipython-input-2-05c9758a9c21>(1)<module>()
     -1 1/0

ipdb> q
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
/Users/adam/<ipython-input-2-05c9758a9c21> in <module>()
----> 1 1/0

ZeroDivisionError: integer division or modulo by zero
Run Code Online (Sandbox Code Playgroud)

我想 q退出pdb 之前看到ZeroDivisionError .

python ipython pdb ipdb

6
推荐指数
1
解决办法
5584
查看次数

什么'***最旧的帧'在ipdb中意味着什么?

我试图向服务器发出http请求并检查我得到的内容.但是,当我尝试使用HTTPResponse objectwith ipdb,我不断得到*** Oldest frame而且我无法运行我应该能够运行的对象上的任何函数.这是用于获取的代码块和ipdb输出:

代码块:

for acc in sp_lost:
    url = 'http://www.uniprot.org/uniprot/?query=mnemonic%3a'+acc+'+active%3ayes&format=tab&columns=entry%20name'
    u = urllib.request.urlopen(url)
    ipdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

ipdb输出:

ipdb> url
'http://www.uniprot.org/uniprot/?query=mnemonic%3aSPATL_MOUSE+active%3ayes&format=tab&columns=entry%20name'
ipdb> u
*** Oldest frame
ipdb> str(u)
'<http.client.HTTPResponse object at 0xe58e2d0>'
ipdb> type(u)
<class 'http.client.HTTPResponse'>
ipdb> u.url                      
*** Oldest frame
ipdb> u.url()         # <-- unable to run url() on object...?
*** Oldest frame
ipdb> 
Run Code Online (Sandbox Code Playgroud)

这是什么*** Oldest frame意思,我怎样才能将这个对象变成更有用的东西,我可以运行相应的函数?

python python-3.x pdb ipdb

6
推荐指数
1
解决办法
1501
查看次数

跨ipdb会话的历史记录

之前已经过这个问题,但我找不到一个好的答案.所以,我想再问一次.

我希望我的ipdb能够记住跨会话的命令.现在,它可以提取在Ipython会话中执行的命令,但不能从旧的ipdb会话中提取.如果我可以拥有此功能,那将节省大量时间.

有没有人有这个问题的解决方案?

python ipython ipdb

6
推荐指数
1
解决办法
571
查看次数

支持黑盒子的Python调试器?

如果我使用调试器,大多数时候我只想看看解释器在我的代码中做了什么.我想跨越我使用的框架和库的所有代码.

AFAIK这称为黑拳击.

如何使用Python ipdb或其他Python调试器执行此操作?

想象一下:

我使用了一个我信任的orm框架,并且不想调试.

cut_hair_method(orm_object.user)
Run Code Online (Sandbox Code Playgroud)

方法cut_hair_method()是我的,我想调试它.

orm_object是我使用的框架.调试器将进入orm-code并做一些我不关心的特殊事情.我没办法告诉调试器:不要跳进orm代码!

更新

对于我来说,这将是很容易的决定哪些代码应该是在黑盒子和代码没有:代码中$VIRTUAL_ENV/src/是不是在黑盒子,所有其他的代码.除了我明确告诉调试器别的东西.

UPDATE2

我从这篇文章中得到了"Black Boxing"的名称:https://hacks.mozilla.org/2013/08/new-features-of-firefox-developer-tools-episode-25/

python debugging ipdb

6
推荐指数
1
解决办法
170
查看次数

ipdb如何将python调试器带到称为第三方代码的框架

在我的python代码中,我有几个级别的调用堆栈,如下所示:

f1:user_func1 
  f2:**user_func2**
    f3:third_party_func1
      f4:third_party_func2
          f5:exception happens here. 
Run Code Online (Sandbox Code Playgroud)

第三方代码中某处发生异常(框架f5)。我使用ipdb进入发生异常的框架,并使用up命令“ u”将调试器带回到我的代码调用第三方代码的框架(框架f2)。

有时第三方代码中有很多级别,因此我需要按多次。有没有办法将调试器快速带入调用第三方代码的代码框架?

python debugging ipdb

6
推荐指数
1
解决办法
1600
查看次数

如何在 pdb.set_trace() 之后停止 python 程序

在 Python(2.7,在 Linux 上运行)中调试脚本时,我偶尔会注入 pdb.set_trace()(注意我实际上使用的是 ipdb),例如:

import ipdb as pdb
try:
    do_something()
    # I'd like to look at some local variables before running do_something_dangerous()
    pdb.set_trace()
except:
    pass
do_something_dangerous()
Run Code Online (Sandbox Code Playgroud)

我通常从 shell 运行我的脚本,例如

python my_script.py
Run Code Online (Sandbox Code Playgroud)

有时在我的调试会话期间,我意识到我不想运行 do_something_dangerous()。停止程序执行以便 do_something_dangerous() 不运行并且我可以退出到 shell 的最简单方法是什么?

据我了解,按 ctrl-d (或发出调试器的退出命令)将简单地退出 ipdb 并且程序将继续运行(在我上面的示例中)。按 ctrl-c 似乎会引发 KeyboardInterrupt,但我从未理解引发它的上下文。

我希望像 ctrl-q 这样的东西可以简单地取消整个过程,但我找不到任何东西。

我知道我的示例是人为设计的,但我的问题是当正在调试的代码设置为捕获异常时如何从 pdb 中止执行。这不是关于如何重组上面的代码使其工作!

python pdb ipdb

5
推荐指数
1
解决办法
1114
查看次数

无法在 docker 容器中输入 ipdb 控制台

我正在使用 docker-compose 构建我的 docker 容器,并使用如下--service-ports标志运行容器:

docker-compose run --service-ports $(service_name) -d
Run Code Online (Sandbox Code Playgroud)

当尝试在容器中的 python 脚本中调用 ipdb 时,使用import ipdb; ipdb.set_trace()ipdb 已初始化,但我无法在控制台中输入任何内容。我也有以停止手动重新启动终端会话(CTRL+CCTRL+D等什么都不做)。也不是终端已经冻结,因为我仍然可以向后滚动,并且在聚焦/不聚焦时光标也会改变外观。

这就是我的术语的样子(我使用iTerm): 在此处输入图片说明

任何想法如何解决这一问题?

python iterm docker ipdb docker-compose

5
推荐指数
1
解决办法
2432
查看次数

使用ipdb和Tracer调试Jupyter Notebook

在Jupyter Notebook中使用调试器时,我一直遇到问题,特别是以下命令:

from IPython.core.debugger import Tracer
Tracer()() #this one triggers the debugger
Run Code Online (Sandbox Code Playgroud)

每当我使用Tracer()()时,内联调试器就会按预期显示,但是一旦在字段中输入任何命令:n(ext),s(tep)等,我就会跳到该行:

finally:
  # Reset our crash handler in place
  sys.excepthook = old_excepthook
Run Code Online (Sandbox Code Playgroud)

这是问题和尝试调试的代码的图像(确切的代码无关,因为我能够在其他笔记本上重现该问题)。

Jupyter Notebook Tracer()()输出

我正在Mac上运行OSX El Capitan,并使用Anaconda for python 2.7。这是有关通过运行获得的当前设置的一些详细信息:

conda info --all (from root env)
Run Code Online (Sandbox Code Playgroud)

系统信息通过:conda info --all from(root)env

注意,我尝试了几种不同的调试选项:pdb,ipdb和Tracer(),但是每个选项都遇到了单独的问题。根据Stackoverflow问题(使用ipdb调试Jupyter中的Python代码),此时 Tracer()似乎是标准选项。

此外,我已经能够在运行Windows 7的Dell计算机上复制此问题。

任何帮助将不胜感激!

python debugging ipython ipdb jupyter-notebook

5
推荐指数
0
解决办法
327
查看次数

调试时如何跳过抛出异常的行

# process_with_huge_time_overhead()
list_a = [1,2,3]
print(list_a[3])
# process_with_huge_time_overhead()
new_data = [5,6,7]
list_a += new_data
Run Code Online (Sandbox Code Playgroud)

到达 ipdb 中的这一行(通过调用python -m ipdb script.py)后,抛出异常:IndexError 在此输入图像描述

如何继续调试和跳转而不经历再次到达这一点的开销

如果我跳到第62行,用n命令执行下一行,是不行的。everyn只是继续退出程序。

在此输入图像描述

python pycharm pdb ipdb

5
推荐指数
1
解决办法
2041
查看次数

pylab 导入后,ipython 调试器充斥着 Qt 错误

导入任何与 pyqt 相关的内容后,我无法在 ipython 中使用调试器。

如果我不导入任何东西并调试像

$ ipython3

In [1]: abc
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-03cfd743661f> in <module>
----> 1 abc

NameError: name 'abc' is not defined

In [2]: %debug
> <ipython-input-1-03cfd743661f>(1)<module>()
----> 1 abc

ipdb> 
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是如果我使用 pyqt5 后端启动 ipython3,我会得到

$ ipython3 --pylab=qt5

In [1]: abc
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-03cfd743661f> in <module>
----> 1 abc

NameError: name 'abc' is not defined

In [2]: %debug
> <ipython-input-1-03cfd743661f>(1)<module>()
----> 1 abc

ipdb> QObject: Cannot create …
Run Code Online (Sandbox Code Playgroud)

python ipython ipdb

5
推荐指数
1
解决办法
176
查看次数