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

标签 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

最佳答案

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

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

关于python - pdb.set_trace() 是否总是覆盖错误回溯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13402686/

相关文章:

python - 如何在 python PDB 中列出当前行?

python - Python PDB 中如何继续下一个循环迭代?

debugging - Visual Studio 2013 尝试加载 iisexpress.pdb

python - 我需要访问 Python 中的元组

python - 如何获取进程的祖 parent ID

python - 如何从python连接到远程hadoop/hive(URL)?

python - 如何在不停止 python 程序和编辑代码的情况下禁用 pdb.set_trace()

python - 在 Windows 中使用资源

python - 如何用相同的代码满足不同的字符串格式化场景?

python - 使用多个参数启动 python pdb?