2016-07-28 97 views
3

我使用PyCharm IDE進行Python編程。檢查程序是否以調試模式運行

當我運行我的proframm時,是否有可能檢查我是否處於調試模式?

我使用pyplot作爲plt,並希望只顯示圖,如果我調試我的程序。是的,我可以有一個全局布爾型調試這是由我自己設置,但我尋找一個性感的解決方案。

感謝您的支持!

回答

1

根據文檔,settrace/gettrace功能可以以被用來實現Python調試:

sys.settrace(tracefunc) 

設置系統的跟蹤功能,WHI ch允許您使用Python實現Python源代碼調試器 。函數 是線程特定的;對於調試器來支持多線程,它必須使用settrace()爲每個正在調試的線程註冊爲 。

然而,這些方法可能無法在所有的實現提供:

CPython的實現細節:該settrace()功能僅用於實現調試器,分析器,覆蓋工具旨在 和 喜歡。它的行爲是實現平臺的一部分,而不是語言定義的一部分,因此可能並不適用於所有Python實現。

你可以使用下面的代碼片段,以檢查是否有人在調試代碼:

import sys 


gettrace = getattr(sys, 'gettrace', None) 

if gettrace is None: 
    print('No sys.gettrace') 
elif gettrace(): 
    print('Hmm, Big Debugger is watching me') 
else: 
    print("Let's do something interesting") 
    print(1/0) 

這一個適用於PDB:

$ python -m pdb main.py 
> /home/soon/Src/Python/main/main.py(3)<module>() 
-> import sys 
(Pdb) step 
> /home/soon/Src/Python/main/main.py(6)<module>() 
-> gettrace = getattr(sys, 'gettrace', None) 
(Pdb) step 
> /home/soon/Src/Python/main/main.py(8)<module>() 
-> if gettrace is None: 
(Pdb) step 
> /home/soon/Src/Python/main/main.py(10)<module>() 
-> elif gettrace(): 
(Pdb) step 
> /home/soon/Src/Python/main/main.py(11)<module>() 
-> print('Hmm, Big Debugger is watching me') 
(Pdb) step 
Hmm, Big Debugger is watching me 
--Return-- 
> /home/soon/Src/Python/main/main.py(11)<module>()->None 
-> print('Hmm, Big Debugger is watching me') 

而且PyCharm:

/usr/bin/python3 /opt/pycharm-professional/helpers/pydev/pydevd.py --multiproc --qt-support --client 127.0.0.1 --port 34192 --file /home/soon/Src/Python/main/main.py 
pydev debugger: process 17250 is connecting 

Connected to pydev debugger (build 143.1559) 
Hmm, Big Debugger is watching me 

Process finished with exit code 0 
0

在Python 3中:

import sys 
if sys.gettrace(): 
    # Debug mode is used 
    do_something_debug_only() 
相關問題