Python pdb.set_trace()是否总是覆盖错误回溯?
我有一个处理套接字的循环,我设置了一个pdb.set_trace()断点来停止并检查每次通过循环调用select.select()的结果。然而,我的代码中的其他地方也有bug,而且标准的回溯似乎被pdb.set_trace覆盖了。因此,当程序退出时,回溯指向set_trace()后面的行,而不是包含错误的行 有没有办法访问实际的回溯,或者pdb.set_trace()会阻止它 以下是相关的代码片段:Python pdb.set_trace()是否总是覆盖错误回溯?,python,pdb,Python,Pdb,我有一个处理套接字的循环,我设置了一个pdb.set_trace()断点来停止并检查每次通过循环调用select.select()的结果。然而,我的代码中的其他地方也有bug,而且标准的回溯似乎被pdb.set_trace覆盖了。因此,当程序退出时,回溯指向set_trace()后面的行,而不是包含错误的行 有没有办法访问实际的回溯,或者pdb.set_trace()会阻止它 以下是相关的代码片段: while True: read_socks, write_socks, _ = sel
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
输出:
Traceback (most recent call last):
File "minimal_pdb_traceback.py", line 7, in <module>
y = "line of code not triggering an error"
AssertionError
回溯(最近一次呼叫最后一次):
文件“minimal_pdb_traceback.py”,第7行,在
y=“未触发错误的代码行”
断言错误
看起来您在Pythonpdb
模块中发现了一个bug!我可以在Python版本2.7、3.2和3.3中重现您的简单示例,而问题在Python 2.4、2.5、2.6或3.1中并不存在
乍一看,我并没有在系统中看到一个先前存在的bug。请在那里报告您的问题,包括您的最小测试用例,以及它可以在哪些python版本上复制。
set\u trace()
没有这样的功能;此时您应该点击调试提示,而不是得到一个AssertionError
。您确定这就是您运行的代码吗?是的,我在循环中的每一次运行中都会按预期点击调试提示。我在pdb中使用“c”继续执行代码。在稍后的过程中,我得到了断言错误。请注意,回溯使用源代码的当前磁盘副本来查找行。如果在启动程序后更改了源代码,则可能会显示错误的行。这是因为编译后的字节码只存储一个行号和一个文件名,所以如果文件后来更改,文件中的索引是不正确的。有趣的是,我不知道这一点。然而,这里的情况并非如此。我本人是一个庞大的pdb
用户,当然从未见过您描述的行为,因此我仍然会从这个方向寻找解释。
Traceback (most recent call last):
File "minimal_pdb_traceback.py", line 7, in <module>
y = "line of code not triggering an error"
AssertionError