web-dev-qa-db-ja.com

事後デバッグ中にipdbを終了する方法は?

私はPythonスクリプトを使用してエラーを検査したい:

$ python3 -m pdb my_script.py

これにより、pdbプロンプトが表示され、cで実行を続行できます。エラーが発生した場合は、変数を検査し、qでスクリプトの実行を終了してシェルに戻ります。 。

私はiPythonデバッガーモジュールでも同じように試しました。

$ python3 -m ipdb my_script.py

ただし、エラーの検査が完了したら、デバッガーを終了することはできません。 q quitコマンドを使用すると、スクリプトの再実行モードと事後モードの間で切り替えが行われます。

$ python3 -m ipdb my_script.py
ipdb> c
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
ipdb> Inspect some variables at this point
ipdb> q
Post mortem debugger finished. The my_script.py will be restarted
ipdb> q
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
ipdb> q
Post mortem debugger finished. The my_script.py will be restarted
ipdb> q
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
ipdb> q
Post mortem debugger finished. The my_script.py will be restarted
ipdb> q
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program

このデバッガを終了する方法は?

24
Ashwin Nanjappa

これはIPython 5.1のバグでした。 このプルリクエスト で修正され、IPython 5.2以降の問題ではなくなりました。 qquit()、または Ctrl+d デバッガーを終了します。

6
joelostblom

ユーザー@ffeastがコメントしたように、 open ipdb issue があり、いくつかの回避策が提案されています。私にとってこれらはうまくいきました:

  • 押す ctrl+z および_kill %1_(またはジョブ番号が何であれ)
  • 実行ipdb> import os; os._exit(1)
28
tutuDajuju

使用する ctrl+z または、2番目のターミナルを開いて、プロセスを探します(ps -ax | grep python)およびプロセスを強制終了します

ステップバイステップ:

  1. ターミナルへのアクセスを取得します。

    • オプションA:を押す ctrl+z
    • オプションBUbuntu GUIにアクセスできる場合、2番目のターミナル(ctrl+alt+t
    • オプションCコマンドラインにのみアクセスできる場合、2番目のtty(ctrl+alt+F2
    • オプションDsshを介してサーバーにアクセスしている場合、別の端末から新しい接続を確立しますssh server(オプションBまたはCを使用するため、2番目の接続を開いてコマンドを実行できます)
  2. 対応するpython PIDプロセスのps -ax | grep python。たとえば、私のプロセスのプロセスID(python my_stucked_process.py) だろう 112923

   3085 tty1     Sl+   15:53 /usr/bin/python /usr/bin/x-terminal-emulator
   112923 pts/2    Tl     0:01 python my_stucked_process.py
   113118 pts/2    S+     0:00 grep --color=auto python
  1. プロセスを強制終了kill -9 112923

@tutuDajujuの使用を提案 ctrl+z しかし、彼らの提案はプロセスをバックグラウンドに送信するだけです(メモリを消費して存在します)。あなたは本当にプロセスを殺すために上記を行う必要があります

1
toto_tico