rutas ruta operaciones obtener navegar entre directorio copiar con como carpetas carpeta buscar archivos archivo actual python

ruta - ¿Cómo detectar que el código Python se está ejecutando a través del depurador?



python directorio actual (8)

¿Existe una forma simple de detectar, dentro del código de Python, que este código se está ejecutando a través del depurador de Python?

Tengo una pequeña aplicación de Python que usa código Java (gracias a JPype). Cuando estoy depurando la parte de Python, me gustaría que a la JVM incorporada también se le den opciones de depuración.


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 tuprog.py:

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


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

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

No está claro cómo podrías hacer esto pre 2.6.


Si usa Pydev, puede detectarlo de la siguiente manera:

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


Otra forma de hacerlo 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 de Python (ver "Constantes integradas" aquí o aquí ):

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

El uso sería algo así como:

if __debug__: print ''Python started without optimization''


Encontré una manera 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 lo agregaría automáticamente cuando esté depurando.


Otra alternativa si está utilizando Pydev que también funciona en un multihilo es:

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


Puedes intentar echar un vistazo a tu stacktrace.

https://docs.python.org/library/inspect.html#the-interpreter-stack

cuando intenta esto en una sesión de depuración:

import inspect inspect.getouterframes(inspect.currentframe()

obtendrá una lista de marcos de registro y puede buscar cualquier cuadro que haga referencia al archivo pdb.


Una solución que trabaja con Python 2.4 (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

Lo mismo debería funcionar con pdb simplemente reemplazando pydevd.py con pdb.py Como do3cc sugirió, intenta encontrar el depurador dentro de la pila de la persona que llama.

Enlaces útiles: