私はpyqt4で構築したかなりシンプルなアプリを持っています。アプリ内のボタンの1つに接続された関数の1つをデバッグしたいと思っていました。しかし、次の操作を行うと
python -m pdb app.pyw
> break app.pyw:55 # This is where the signal handling function starts.
期待通りには動作しません。ブレークポイントを設定した関数を中断してステップ実行するのではなく、デバッガーが無限ループに入り、出力してしまいQCoreApplication::exec: The event loop is already running
、何も入力できません。これを実行するより良い方法はありますか?
ベストアンサー1
電話する必要がありますQtCore.pyqtRemoveInputHook私はそれを独自のバージョンでラップしますset_trace
:
def debug_trace():
'''Set a tracepoint in the Python debugger that works with Qt'''
from PyQt4.QtCore import pyqtRemoveInputHook
# Or for Qt5
#from PyQt5.QtCore import pyqtRemoveInputHook
from pdb import set_trace
pyqtRemoveInputHook()
set_trace()
デバッグが完了したら、 を呼び出すことができますQtCore.pyqtRestoreInputHook()
。おそらく、まだ pdb にいるときに呼び出すのが最適です。その後、Enter キーを押してコンソール スパムが発生しているときに、アプリが正常に再開するまで 'c' (続行) を押し続けます。(何らかの理由で 'c' を数回押す必要があり、pdb に戻り続けましたが、数回押すと正常に再開しました)
詳細については、Google で「pyqtRemoveInputHook pdb」を検索してください。(本当に明白ですよね? ;P)