Linuxサーバ上で動作するマルチスレッドPythonアプリケーションがあります。私はPyDevのDebug Serverを使ってリモートからデバッグすることができます。これは非常に貴重なデバッグリソースのようです。しかし、私が見ている問題は、それが私が望むほど役に立たないことです。MainThread以外のスレッドでPyDevがサスペンドするようにする
私のアプリケーションがサーバー上で動作している間に、もう1つのボックスでEclipseに入り、MainThreadを一時停止し、その時点でのスタックトレースを取得してから実行を再開できます。それは素晴らしい。しかし、私が子スレッドの1つを試してみると、サスペンド・ボタンがグレーアウトされますが、スタック・トレースはなく、すべてが正常に実行されます。デバッグウィンドウには子スレッドがあり、それはPIDですが、本当に制御できないか、それが何であるかを見ることはできません。右クリックして参考になる「コピースタック」を試してみると、「スレッド-4 - pid29848_seq5」が得られます。
ブレークポイントは正常に機能しているようです。子スレッドがそれらのスレッドのうちの1つに当たった場合、私はステップバイステップで変数などを見ることができます。しかし、それを有効に使用するには、コードに特定の関心のある点があることが必要です。私は本当に私のアプリケーションを実行したいと思っています。珍しい状態になったら、PyDevを使って何が起きているのかを見てください。
セットアップに何か問題がありますか?これは私が反対しているPyDevの単なる制限ですか?どのように子スレッドで何が起こっているのを見ることができますか?
私は同じ問題があります。 Eclipse、PyDev、Django、manage.py runserver --noautoreloadコマンドを使用したリモートサーバーいいえ、私はビューのいずれかでブレークポイントを設定することはできません。 –
私はpythonコードのget viewメソッドの1つにtime.sleep(10000)を追加しました。PyDevにはスタックが見えません。スレッドは見えますが、スタックはありません。 –
だから私は、スレッドの中にスタックを見ることができるようになったのです。pydevd.settrace(suspend = False)、ブレークポイントの直前、しかし、なぜこれが必要なのか分からないのは、settrace()のためのpython独自のドキュメントによると、 "スレッドモジュールから開始されたすべてのスレッドのトレース機能を設定するからです。"これをさらに検討する予定です。 –