pdb:完成后跳过重新启动

Fri*_*ich 7 python pdb

python -m pdb -c "c" script.py
Run Code Online (Sandbox Code Playgroud)

当出现问题时,进入调试模式。从文档中,我发现该选项(Python 3.2+)可以让我每次在程序启动时-c "c"点击c + 。Enter

然而,当程序正常完成时,它会输出 The program finished and will be restarted,我仍然需要按q+Enter来退出程序。有没有办法也跳过这个?

Aks*_*gal 5

-c您可以按顺序添加多个命令。

方法 1:仅在没有遇到错误时退出

如果没有遇到错误,您可以给出另一个命令q来跳出 pdb 模式。但是,如果遇到错误,它将进入调试模式,您必须继续点击c并输入才能继续。

python -mpdb -c "c" -c "q" script.py
Run Code Online (Sandbox Code Playgroud)

没有遇到错误(立即退出!)-

(base) $ python -mpdb -c "c" -c "q" script.py
The program finished and will be restarted
(base) $ 
Run Code Online (Sandbox Code Playgroud)

遇到错误(进入调试模式!)-

(base) $ python -mpdb -c "c" -c "q" script.py
Traceback (most recent call last):
  File "/anaconda3/lib/python3.7/pdb.py", line 1701, in main
    pdb._runscript(mainpyfile)
  File "/anaconda3/lib/python3.7/pdb.py", line 1570, in _runscript
    self.run(statement)
  File "/anaconda3/lib/python3.7/bdb.py", line 585, in run
    exec(cmd, globals, locals)
  File "<string>", line 1, in <module>
  File "/Projects/Random/script.py", line 6, in <module>
    """
ModuleNotFoundError: No module named 'thispackagedoesntexist'
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
Post mortem debugger finished. The script.py will be restarted
> /Projects/Random/script.py(6)<module>()
-> """
(Pdb) 
Run Code Online (Sandbox Code Playgroud)

方法 2:无论是否出错都退出

您可以按以下方式使用echo "q"并将其传递给下一个 ( pdb) 命令。|这将运行第二个命令一次并立即获取echo "q"退出的输出 -

echo "q" | python -mpdb -c "c" script.py
Run Code Online (Sandbox Code Playgroud)

当程序在调试模式下运行完脚本后,这会命中 q 。调试在遇到(或未遇到)错误后自动退出。

没有遇到错误(立即退出!)-

(base) $ echo "q" | python -mpdb -c "c" script.py
The program finished and will be restarted
> /Projects/Random/script.py(6)<module>()
-> """
(Pdb) (base) $ 
Run Code Online (Sandbox Code Playgroud)

遇到错误(立即退出!)-

(base) $ echo "q" | python -mpdb -c "c" script.py
Traceback (most recent call last):
  File "/anaconda3/lib/python3.7/pdb.py", line 1701, in main
    pdb._runscript(mainpyfile)
  File "/anaconda3/lib/python3.7/pdb.py", line 1570, in _runscript
    self.run(statement)
  File "/anaconda3/lib/python3.7/bdb.py", line 585, in run
    exec(cmd, globals, locals)
  File "<string>", line 1, in <module>
  File /Projects/Random/script.py", line 6, in <module>
    """
ModuleNotFoundError: No module named 'thispackagedoesntexist'
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program
> /Projects/Random/script.py(6)<module>()
-> """
(Pdb) Post mortem debugger finished. The script.py will be restarted
> /Projects/Random/script.py(6)<module>()
-> """
(Pdb) 
(base) $ 
Run Code Online (Sandbox Code Playgroud)

以下是可以与 pdb 一起使用的命令列表 -

(Pdb) help

Documented commands (type help <topic>):
========================================
EOF    c          d        h         list      q        rv       undisplay
a      cl         debug    help      ll        quit     s        unt
alias  clear      disable  ignore    longlist  r        source   until
args   commands   display  interact  n         restart  step     up
b      condition  down     j         next      return   tbreak   w
break  cont       enable   jump      p         retval   u        whatis
bt     continue   exit     l         pp        run      unalias  where
Run Code Online (Sandbox Code Playgroud)