2012-10-08 3 views
6

私はPythonとpdbには比較的新しいですが、私はgdbに関する多くの経験があります。PDB.run - pdbセッションを再開する

私の問題は、ある時点で自分のコードにいくつかのブレークポイントを設定した場合、何かを変更してこれらのブレークポイントを保持しているデバッグセッションを再実行したいということです。しかし、私は2つの独立したLinuxプラットフォーム上でこれを試してみましたし、同じ結果を持っていた

(Pdb) run 
    Traceback (most recent call last): 
    File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main 
    "__main__", fname, loader, pkg_name) 
    File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code 
    exec code in run_globals 
    File "/usr/lib64/python2.6/pdb.py", line 1319, in <module> 
    pdb.main() 
    File "/usr/lib64/python2.6/pdb.py", line 1312, in main 
    pdb.interaction(None, t) 
    File "/usr/lib64/python2.6/pdb.py", line 198, in interaction 
    self.cmdloop() 
    File "/usr/lib64/python2.6/cmd.py", line 142, in cmdloop 
    stop = self.onecmd(line) 
    File "/usr/lib64/python2.6/pdb.py", line 267, in onecmd 
    return cmd.Cmd.onecmd(self, line) 
    File "/usr/lib64/python2.6/cmd.py", line 219, in onecmd 
    return func(arg) 
    File "/usr/lib64/python2.6/pdb.py", line 661, in do_run 
    raise Restart 
pdb.Restart 
]$ 

次の出力で終了するように私のPDBセッションの場合、私のセッションを「実行」を入力するが、私は、ドキュメント内の任意の修正を見つけることができません。

答えて

8

誰かが気にしているのであれば、pdbの "run"はgdbの "run"とまったく同じではありませんでした。私が入力したgdbでは、プログラムが再起動し、最初のブレークポイントに進みます。 pdbでは、プログラムが再起動し、ファイルの先頭に移動します。最初のブレークポイントに移動するには、 'n'を押してから 'c'を押す必要があります。プログラムを実行しようとすると、上記のように、デバッガがクラッシュするファイルの先頭にもう一度実行します。むしろ親切PDB、異常な状態(つまり、あなたのプログラムのバグを)遭遇すると

+0

はい、誰かが気にします。ありがとう! – Oddthinking

+2

これはまだpdbのバグです – erjoalgo

+0

あなたは再起動した直後にすることはできますか? –

1

は言う:ここ

Uncaught exception. Entering post mortem debugging 
Running 'cont' or 'step' will restart the program 

、「実行」または「再起動」を入力すると、あっさりと終了するように、PDBのプロセスが発生しますOP州(ただし、約束どおりに「継続」または「ステップ」が再開されます)。

私たちが「死後デバッグ」を入力したかどうかにかかわらず、多くの難しいpythonistasはむしろ「実行」または「再起動」しますが、既存の再起動セマンティクスはクリーナー実装の副産物であると確信しています。