2016-09-30 44 views
2

當在Python調試腳本(2.7,在Linux上運行),我偶爾注入pdb.set_trace()(注意,我在實際使用IPDB)後,例如停止Python程序:如何pdb.set_trace()

import ipdb as pdb 
try: 
    do_something() 
    # I'd like to look at some local variables before running do_something_dangerous() 
    pdb.set_trace() 
except: 
    pass 
do_something_dangerous() 

我通常從shell運行腳本,例如

python my_script.py 

有時在我的調試會話期間,我意識到我不想運行do_something_dangerous()。什麼是停止程序執行的最簡單方法,以便do_something_dangerous()不運行,我可以退回到shell?按照我的理解,按ctrl-d(或發出調試器的退出命令)將簡單地退出ipdb,程序將繼續運行(在我上面的示例中)。按ctrl-c似乎引發了一個KeyboardInterrupt,但我從來沒有理解它引發的上下文。

我希望像ctrl-q這樣的東西簡單地把整個過程取下來,但我一直沒能找到任何東西。

我明白我的例子是高度設計的,但我的問題是關於如何在調試代碼設置爲捕獲異常時從pdb中止執行。這不是關於如何重構上面的代碼,所以它的工作原理!

回答

0

module docs

Q(UIT) 從調試器退出。正在執行的程序被中止。

具體來說,這將導致下一個被調用的調試器函數引發BdbQuit異常。

+0

我認爲ctrl-d和q(uit)是一樣的,我的代碼設置爲捕獲異常,所以這不會成功終止我的程序。我會相應地更新我的例子,因爲那根本不清楚! – nonagon

1

我發現ctrl-z暫停python/ipdb進程,後面跟'kill%1'來終止進程,效果很好,對我來說鍵入的速度相當快(用bash別名k ='kill%1 「)。我不確定是否有更清潔/更簡單的東西。

+0

其實別名k ='kill %%;等待%% 2>/dev/null'對我的目的來說更好一點(它抑制了[1] +消息,並且在有其他工作的情況下工作) – nonagon