23

次のマルチスレッド プログラムを考えてみましょう。

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 でデバッグするとき、最初にプロンプ​​トで 2 つの print ステートメントのそれぞれにブレーク ポイントを設定します。それから私は続けます。pdb は で壊れprint 'hola'ます。もう一度続行して、他のスレッドで印刷の効果を確認しますが、pdb は壊れません。

ヘルプ コマンドには、gdb のようなスレッド コンテキストを切り替えるための情報は何も表示されません。つまり、あるスレッド コンテキストで、別のコンテキストでトリップするブレークポイントを設定することはできないのでしょうか?

4

2 に答える 2

9

これは私のために働く:

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 を使用しています。使用している OS と Python のバージョンは何ですか?

于 2012-10-11T00:24:23.767 に答える
-3

最初のブレークポイントに到達した後、この行に到達したときに (n) 次の行に進んでいると仮定します

someThread.start()

(n) next ではなく (s) step-into を使用していることを確認してください。 pdb コマンド

于 2012-10-11T01:20:29.397 に答える