标签: pdb

rpdb2:如何连接到pid

我有一个wsgi应用程序在代码中有这个:

import rpdb2; rpdb2.start_embedded_debugger("asdf")
Run Code Online (Sandbox Code Playgroud)

现在使用rpdb2(而不是winpdb!)我想连接到进程并开始调试.

我无法弄清楚如何做到这一点.如何连接到正在运行的进程或如何使该进程连接到调试器?

python winpdb pdb

3
推荐指数
1
解决办法
3569
查看次数

python调用函数时会发生什么?

我正在使用pdb来调试程序.我先后点击'c'来运行代码,每一步pdb都显示我执行了哪一行.

假设我们有这个代码:

def foo(bar):
   print(bar)

foo('hey')
Run Code Online (Sandbox Code Playgroud)

首先,第4行调用函数foo.然后pdb告诉我这一行

def foo(bar)
Run Code Online (Sandbox Code Playgroud)

被执行.

为什么?这条线不仅仅是一种标签吗?执行"print(bar)"之前会发生什么?(伴随着另一个人的打击)

编辑:我试验做的事情是实际检查定义.事实上,在案件foo为发生器(即不能以这样的方式被称为)蟒蛇仍到那里,然后决定把它当作一台发电机(或根据情况的功能.).

python python-2.7 pdb

3
推荐指数
1
解决办法
1371
查看次数

如何在pdb中调用help()

我想拥有pdb的交互性,但是还需要使用python的帮助功能来内省我不熟悉的对象/方法。

如何从pdb使用python的help()?

我尝试的一切都给了我:

(Pdb) help(help)
*** No help on (help)
(Pdb) help(list())
*** No help on (list())
Run Code Online (Sandbox Code Playgroud)

python pdb

3
推荐指数
1
解决办法
118
查看次数

如何在python中跟踪内置函数

我想了解如何__enter____exit__方法被调用文件上下文管理。

with open("test.txt") as fp:
  fp.read()
Run Code Online (Sandbox Code Playgroud)

step在 pdb 中尝试过命令 - 而不是去定义函数open,它只是执行它并移动到下一行。

我尝试使用sys.settrace()过,但即使没有捕捉到的函数调用open__enter____exit__在任何事件。

当然,这适用于从其他模块和同一模块中导入的函数。我假设这应该以类似的方式适用于这些开箱即用的内置函数。我找不到任何指向此的文档。是否可以单步执行或跟踪内置函数的执行?

使用 Python 2.7。

python debugging pdb

3
推荐指数
1
解决办法
330
查看次数

跟踪python中运行缓慢的原因

在一个大型项目中,我遇到了一个非常慢的功能(说到几秒到几分钟的执行时间)。该函数可以完成很多事情,并且具有非常深的堆栈跟踪。尽管此函数的执行只涉及几个类,但是长运行时间的来源并不太明显。

我开始调试该功能,跟踪调用等,并发现跟踪包非常有用。有了这个,我可以确定一些函数,这些函数会一遍又一遍地汇编列表,实际上,在第一次执行后保存列表时,实际上导致了大约3倍的加速。

但是现在我真的看不到任何更明显的部分,因为跟踪包产生了几兆字节的文本,因此可以优化功能的地方,而且我看不到任何对我来说可疑的东西。

我考虑过使用跟踪的计时选项,以便为我提供一些有关运行时的概述,以查看哪些功能可能很慢-但是数据量太大,因此总的执行时间为列出了每个调用,但是跟踪软件包似乎不支持此调用吗?

另一个问题是,我想在哪个级别获得执行时间。相反,不是单个语句很慢,而是经常调用整个函数或不保存数据的情况。因此,我最终需要的是每个语句的平均执行时间乘以计数。后者可以由跟踪包生成。

除了pdb和trace之外,最终是否还有其他工具可以使用?

python trace pdb

3
推荐指数
1
解决办法
1129
查看次数

在Python中使用pdb以编程方式添加断点

我发现在大型多层软件中,通过将以下内容放入代码中通常更容易调试 python 代码。

import pdb; pdb.set_trace()这在我放置语句的 LOC 处设置了一个断点,我可以在代码中以交互方式使用 pdb 继续并检查代码执行等。

我想知道是否可以为此类 python 调试添加多个断点,以便我可以c在交互式 python 调试器中执行并命中下一个断点?

即例如

<python code>
import pdb; pdb.set_trace();
... interactive debugging....
...press c here....
<more python code>
...
....
<breakpoint>// How can we insert such a breakpoint? 
Run Code Online (Sandbox Code Playgroud)

python pdb

3
推荐指数
1
解决办法
1606
查看次数

Python:如何删除pdb中的shortchuts

简单但可能很明显但不适合我们:当命令有相同的名称变量时,
使用pdb快捷方式会变得烦人,因此,如何删除pdb中的所有密钥快捷方式?我们使用pdbspyder,顺便说一句.

>>> p = 1
Run Code Online (Sandbox Code Playgroud)

虽然p我们对变量感兴趣,但在尝试调试时,上面显示为命令(abr.用于打印)!混乱!

python debugging shortcuts spyder pdb

2
推荐指数
1
解决办法
88
查看次数

如何在调试器中使用python 2.7创建带有两个for循环的单行脚本

在python调试器或django shell中创建一行for循环很容易:

>>>> for x in (1,2,3,4):print(x);
>>>> for x in Obj.objects.all():something(x);
Run Code Online (Sandbox Code Playgroud)

但是我怎么能在那里得到第二个for循环呢?

>>>> for x in (1,2,3,4):print x;for y in (5,6):print x,y;
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

我很在意,因为在交互式工作时对前一个命令进行向上箭头编辑很好(这不是尝试在任何其他上下文中使用单行命令).

注意:"打印"只是一个例子.在实际使用中,我会迭代对象或执行其他编程或调试任务,例如'for s in Section.objects.all():for s in s.children():print j'.我使用的是Python 2.7.

python django-shell pdb

2
推荐指数
1
解决办法
1891
查看次数

IPython笔记本中的pprint和ipdb

我正在尝试学习如何使用ipdb调试器.我插入一个断点,然后输入continue我从一个断点前进到另一个断点.如果我想打印变量的值一段时间我在两个断点之间执行的一半,我怎么能用ipdb/pdb做这个?我试过print和pprint但没有出现. 在此输入图像描述

python ipython pdb ipython-notebook

2
推荐指数
1
解决办法
1364
查看次数

为什么在调用pdb.set_trace()时此测试崩溃?

下面是简单的单元测试。

如果我在不使用“ test”作为参数的情况下运行它(例如python -m unittest module_name),它将通过。如果以“ test”作为参数运行它,则会收到“ TypeError:内置操作的错误参数类型”。为什么?

from io import StringIO
import sys
from unittest import TestCase

class TestSimple(TestCase):
    def test_simple(self):
        old_stdout = sys.stdout
        buf = StringIO()
        try:
            sys.stdout = buf
            print('hi')
        finally:
            import pdb
            if 'test' in sys.argv:
                pdb.set_trace()
            sys.stdout = old_stdout
Run Code Online (Sandbox Code Playgroud)

contextlib.redirect_stdout版本:

from contextlib import redirect_stdout
from io import StringIO
import pdb
import sys
from unittest import TestCase

class TestSimple(TestCase):
    def test_simple(self):
        buf = StringIO()
        with redirect_stdout(buf):
            print('hi')
            pdb.set_trace()
        print('finis')
Run Code Online (Sandbox Code Playgroud)

提前致谢。

编辑: 原始程序已在Debian和Windows 7中的Python 3.4中进行了测试。

类似的东西(使用环境标志而不是命令行参数)似乎在Python 2中挂起,但是按c可以完成它,所以我猜测可能是pdb的UI已被重定向。但是Python …

python python-3.x pdb

2
推荐指数
1
解决办法
430
查看次数