2016-11-10 23 views
1

我想了解如何使用pdb .post_mortem()方法。如何使用pdb的post_mortem方法?

這個給定的文件

# expdb.py 
import pdb 
import trace 

def hello(): 
    a = 6 * 9 
    b = 7 ** 2 
    c = a * b 
    d = 4/0 
    print(c) 

tracer = trace.Trace() 

命令提示符

''' 
# first Try 

λ python -i expdb.py 
>>> pdb.post_mortem() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Program Files\Anaconda3\lib\pdb.py", line 1590, in post_mortem 
    raise ValueError("A valid traceback must be passed if no " 
ValueError: A valid traceback must be passed if no exception is being handled 
''' 

''' 
# Second Try 

λ python -i expdb.py 
>>> pdb.post_mortem(traceback=tracer.run('hello()')) 
--- modulename: trace, funcname: _unsettrace 
trace.py(77):   sys.settrace(None) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Program Files\Anaconda3\lib\trace.py", line 500, in run 
    self.runctx(cmd, dict, dict) 
    File "C:\Program Files\Anaconda3\lib\trace.py", line 508, in runctx 
    exec(cmd, globals, locals) 
    File "<string>", line 1, in <module> 
    File "expdb.py", line 8, in hello 
    d = 4/0 
ZeroDivisionError: division by zero 
>>> 

回答

3

的驗屍方法想要一個回溯對象,而不是跟蹤對象。 Traceback對象可以從except塊中的sys.exec_info()[2]獲取,也可以直接調用pdb.post_mortem()(不帶參數)(在except塊中)。

但無論哪種方式,您必須捕捉異常,然後才能對其進行調試。

+0

謝謝凱文。我的下一個學習模塊將是追溯 –