2008-12-02 75 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 
相关问题