2012-10-10 63 views
7

इस मल्टी-थ्रेडेड कार्यक्रम पर विचार करें:पीडीबी किसी अन्य धागे में नहीं टूट सकता है?

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 'hola' पर पीडीबी ब्रेक। मैं फिर से जारी रहता हूं और प्रिंट के प्रभाव को अन्य थ्रेड में देखता हूं, लेकिन पीडीबी टूट नहीं जाता है।

सहायता आदेश जीडीबी जैसे थ्रेड संदर्भों को स्विच करने के लिए कुछ भी सूचीबद्ध नहीं करते हैं ... तो ... क्या एक थ्रेड संदर्भ में एक ब्रेकपॉइंट सेट करने के लिए यह संभव नहीं है जो किसी अन्य संदर्भ में यात्रा करेगा?

उत्तर

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) 

यह विंडोज 7 के तहत और अजगर 2.7.2 के साथ है। क्या ओएस & पायथन संस्करण आप उपयोग कर रहे हैं?

0

के बाद आप अपने पहले ब्रेकप्वाइंट मारा, मैं तुम्हारे साथ कदम रख रहे हैं मान (एन) अगली पंक्ति जब आप इस लाइन के लिए मिलता है

someThread.start() 

आप (रों) कदम दर में उपयोग कर रहे हैं और नहीं यह सुनिश्चित कर लें (एन) अगला। pdb commands