2008-12-02 16 views

Respuesta

10

una solución de trabajo con Python 2.4 (que debería funcionar con cualquier versión superior a 2,1) y PyDev:

import inspect 

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

El mismo debería trabajar con pdb mediante la simple sustitución pydevd.py con pdb.py. Como do3cc sugirió, intenta encontrar el depurador dentro de la pila de la persona que llama.

Enlaces de interés:

2

Al echar un vistazo rápido a los documentos pdb y al código fuente, no parece que haya una forma integrada de hacerlo. Sugiero que establezca una variable de entorno que indique que la depuración está en progreso y que su aplicación responda a eso.

$ USING_PDB=1 pdb yourprog.py 

Luego, en yourprog.py:

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

depuradores de Python (así como perfiladores y herramientas de cobertura) utilizar la función sys.settrace (en el módulo sys) para registrar una devolución de llamada que se llama cuando interesante los eventos suceden

Si está utilizando Python 2.6, puede llamar al sys.gettrace() para obtener la función de devolución de llamada actual. Si no es None, entonces puede suponer que debe pasar parámetros de depuración a la JVM.

No está claro cómo se puede hacer este pre 2.6.

+1

A pesar de que parece ser una forma más limpia, que no funciona en el APP si no hay un punto de interrupción. – apoorvkul

+0

Hmm, tienes razón, debe ser una optimización que usa el depurador. Dicho eso, la mayoría de las veces cuando ejecutas el depurador tendrás un conjunto de puntos de interrupción. – babbageclunk

3

Si está utilizando PyDev, puede detectar que de tal manera:

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

Otra forma de hacer depende de cómo se inicia el intérprete de Python. Requiere que inicie Python usando -O para producción y sin -O para la depuración. Por lo tanto, requiere una disciplina externa que podría ser difícil de mantener ... pero, una vez más, podría adaptarse perfectamente a sus procesos.

De los documentos pitón (ver "constantes integradas" here o here):

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

uso sería algo así como:

if __debug__: 
    print 'Python started without optimization' 
2

he encontrado una forma más limpia de hacerlo,

Simplemente agregue la siguiente línea en su manage.py

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

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


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

Luego, se agregará automáticamente cuando esté depurando.

5

Otra alternativa si usted está utilizando PyDev que también trabaja en un multihilo es:

try: 
    import pydevd 
    DEBUGGING = True 
except ImportError: 
    DEBUGGING = False 
Cuestiones relacionadas