pdb.set_trace()是否总是覆盖错误回溯?

时间:2012-11-15 17:11:22

标签: python pdb

我有一个循环处理套接字,我设置了一个pdb.set_trace()断点来停止并检查每次循环时调用select.select()的结果。但是,我的代码中还存在其他错误,似乎pdb.set_trace正在覆盖标准回溯。因此,当程序退出时,回溯指向紧跟在set_trace()之后的行,而不是包含错误的行。

有没有办法访问实际的回溯,还是pdb.set_trace()破坏它?

以下是相关的代码段:

while True:
    read_socks, write_socks, _ = select.select(all_sockets, all_sockets, '')
    pdb.set_trace()

    if listen_socket.fileno() in read_socks:
        new_socket, address = listen_socket.accept()
        id_num = new_socket.fileno()
        all_sockets[id_num] = new_socket

    for id_num in write_socks:
        # do something that triggers an Assertion error

然后我得到回溯如下:

Traceback (most recent call last):
  File "socktactoe_server.py", line 62, in <module>
    if listen_sock.fileno() in read_socks:
AssertionError

这是一个简短的可重复测试案例;运行它,每次有断点时点击c,在第二次继续后assert引发异常并报告错误的行:

import pdb
x = 0
while True:
    pdb.set_trace()
    y = "line of code not triggering an error"
    x += 1
    assert x != 3

输出:

Traceback (most recent call last):
  File "minimal_pdb_traceback.py", line 7, in <module>
    y = "line of code not triggering an error"
AssertionError

1 个答案:

答案 0 :(得分:0)

看起来您在Python pdb模块中发现了一个错误!我可以在Python版本2.7,3.2和3.3中重现您的简单案例,而Python 2.4,2.5,2.6或3.1中的问题是

乍一看,我没有在python bug tracker中看到预先存在的错误。请在那里报告您的问题,使用最小的测试用例,以及可以复制的python版本。