pdb不能打断另一个线程?

2024-06-26 02:25:34 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑这个多线程程序:

import threading

class SomeThread(threading.Thread):
  def run(self):
    a = 1
    print a

def main():
  print 'hola'
  someThread = SomeThread()
  someThread.start()

if __name__ == '__main__':
  main()

当我用pdb调试这个程序时,在提示下,我首先在两个print语句中的每一个设置一个断点。然后我继续。pdb在print 'hola'处断开。我再次继续,在另一个线程中看到打印的效果,但pdb没有中断。

帮助命令没有列出任何东西来切换线程上下文,如gdb。。。所以。。。在一个线程上下文中设置一个将在另一个上下文中触发的断点是不可能的吗?


Tags: runimport程序maindef线程threadpdb
2条回答

这对我有效:

import threading
import pdb

class SomeThread(threading.Thread):
  def run(self):
    a = 1
    print a
    pdb.set_trace()

def main():
  print 'hola'
  pdb.set_trace()
  someThread = SomeThread()
  someThread.start()

if __name__ == '__main__':
  main()

这给了我:

C:\Code>python b.py
hola
> c:\code\b.py(13)main()
-> someThread = SomeThread()
(Pdb) l
  8         pdb.set_trace()
  9
 10     def main():
 11       print 'hola'
 12       pdb.set_trace()
 13  ->   someThread = SomeThread()
 14       someThread.start()
 15
 16     if __name__ == '__main__':
 17       main()
[EOF]
(Pdb) c
1
--Return--
> c:\code\b.py(8)run()->None
-> pdb.set_trace()
(Pdb) l
  3
  4     class SomeThread(threading.Thread):
  5       def run(self):
  6         a = 1
  7         print a
  8  ->     pdb.set_trace()
  9
 10     def main():
 11       print 'hola'
 12       pdb.set_trace()
 13       someThread = SomeThread()
(Pdb)

这是在Windows7和Python2.7.2下。您使用的操作系统和Python版本是什么?

在您到达第一个断点后,我假设您正在使用(n)下一行 当你到这条线的时候

someThread.start()

请确保使用的是“进入”而不是“下一步”。 pdb commands

相关问题 更多 >