2008-12-02 69 views

回答

10

的溶液與Python 2.4工作和Pydev的(它應該與任何版本優於2.1工作):

import inspect 

def isdebugging(): 
    for frame in inspect.stack(): 
    if frame[1].endswith("pydevd.py"): 
     return True 
    return False 

同樣應該通過簡單地用pdb.py替換pydevd.py與PDB工作。正如do3cc建議的那樣,它會嘗試在調用者堆棧中找到調試器。

相關鏈接:

2

通過快速瀏覽pdb文檔和源代碼,看起來好像沒有內置的方法來執行此操作。我建議你設置一個環境變量,指出正在進行調試,並讓你的應用程序對此作出響應。

$ USING_PDB=1 pdb yourprog.py 
在yourprog.py

然後:

import os 
if os.environ.get('USING_PDB'): 
    # debugging actions 
    pass 
17

的Python調試器(以及剖析和覆蓋工具)使用sys.settrace功能(sys模塊)註冊一個回調時被所謂的有趣事件發生。

如果您使用的是Python 2.6,則可以調用sys.gettrace()來獲取當前跟蹤回調函數。如果它不是None那麼你可以假設你應該將調試參數傳遞給JVM。

目前還不清楚你可以如何做到這一點前2.6。

+1

雖然它似乎是一個更清潔的方式,它並沒有在PDB,如果沒有斷點設置工作。 – apoorvkul 2014-12-05 07:37:36

3

如果您使用Pydev的,你可以檢測到它以這樣一種方式:

import sys 
if 'pydevd' in sys.modules: 
    print "Debugger" 
else: 
    print "commandline" 
5

另一種方法它取決於你的python解釋器是如何啓動的。它要求你使用-O開始生產Python,而沒有-O開始調試。所以它確實需要一個可能難以維護的外部紀律..但是它可能再次適合您的流程。

從python文檔(請參閱 「內置常量」 herehere):

__debug__ 
This constant is true if Python was not started with an -O option. 

用法是這樣的:

if __debug__: 
    print 'Python started without optimization' 
2

我發現了一個更清潔的方式做到這一點,

只需添加下面的行放在manage.py

#!/usr/bin/env python 
import os 
import sys 

if __debug__: 
    sys.path.append('/path/to/views.py') 


if __name__ == "__main__": 
    .... 

然後它會在您調試時自動添加它。

5

其他選擇,如果你正在使用Pydev的也工作在多線程是:

try: 
    import pydevd 
    DEBUGGING = True 
except ImportError: 
    DEBUGGING = False 
相關問題