2012-10-10 24 views
7

考慮這個多線程程序:pdb無法在另一個線程中打破?

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,在提示我第一次在每兩個打印語句設置一個斷點。然後我繼續。 pdb分爲print 'hola'。我再次繼續並在另一個線程中看到打印效果,但pdb不會中斷。

幫助命令不會列出任何內容來切換像gdb這樣的線程上下文......所以......在一個線程上下文中不可能設置一個將在另一個上下文中跳轉的斷點?

回答

5

這個工作對我來說:

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) 

這是Windows 7中,並與Python 2.7.2。你使用的是什麼操作系統& Python版本?

0

你打你的第一個斷點後,我假設你用步進(n)的下一行 當你到這條線

someThread.start() 

確保您使用(S)逐步進入,而不是( n)接下來。 pdb commands

相關問題