2008-10-09 11 views
8

¿Hay alguna manera de usar Flash (CS3 + AS3) para determinar si el swf publicado se está ejecutando en un depurador o en el modo de depuración de Flash?Determinar si swf está en un reproductor o modo "depurar"

Soy consciente de que Flex proporciona la capacidad de configurar diferentes objetivos de compilación (versión/depuración) y de que puede usar algo como CONFIG::debug para la inclusión de código de estilo #ifdef en tiempo de compilación.

Imagino algo así como System.isDebug() pero no puedo encontrar nada. Quiero utilizar esto porque hay una funcionalidad de depuración en mi aplicación que I definitivamente no quiero estar disponible en un entorno de producción.

+0

Muy buena pregunta. Es importante saber esto porque los errores explotan con advertencias para el usuario en el reproductor de depuración, y probablemente haya otras diferencias. –

Respuesta

19

Salida esta clase http://blog.another-d-mention.ro/programming/how-to-identify-at-runtime-if-swf-is-in-debug-or-release-mode-build/

Esta clase proporciona dos piezas pertinentes (y diferentes) de información:

  • Fue el SWF construido con el interruptor -debug (tiene símbolos de depuración compilado en)?
  • ¿El reproductor Flash es un reproductor de depuración (tiene la capacidad de mostrar errores, etc.)?

El Capabilities.isDebugger solo responde la segunda pregunta: es el usuario que ejecuta el reproductor de depuración de Flash. En su caso, para encerrar porciones de su aplicación en una compilación de depuración, desea la verificación de compilación de compilación (y luego no entrega las compilaciones de compilación a producción).

Sin embargo, tenga en cuenta que estas dos comprobaciones son verificaciones de tiempo de ejecución. El uso de compilación condicional (también conocido como CONFIG :: debug) alrededor de su código de depuración es una buena idea, ya que garantizará que el código de depuración posiblemente no se entregue en el archivo SWF final, haciéndolo lo más pequeño y seguro posible.

estoy reproduciendo el código hace referencia aquí, en caso de que el enlace del blog siempre va hacia abajo:

package org.adm.runtime 
{ 
    import flash.system.Capabilities; 

    public class ModeCheck 
    { 
    /** 
    * Returns true if the user is running the app on a Debug Flash Player. 
    * Uses the Capabilities class 
    **/ 
    public static function isDebugPlayer() : Boolean 
    { 
     return Capabilities.isDebugger; 
    } 

    /** 
    * Returns true if the swf is built in debug mode 
    **/ 
    public static function isDebugBuild() : Boolean 
    { 
     var stackTrace:String = new Error().getStackTrace(); 
     return (stackTrace && stackTrace.search(/:[0-9]+]$/m) > -1); 
    } 

    /** 
    * Returns true if the swf is built in release mode 
    **/ 
    public static function isReleaseBuild() : Boolean 
    { 
     return !isDebugBuild(); 
    } 
    } 
} 
+0

'new Error(). GetStackTrace()' devuelve 'null' en la versión de lanzamiento ... –

+0

Cuando es un reproductor de depuración, su método' isDebugBuild' siempre devolverá 'false'. En mi opinión, cuando el jugador es un depurador, no hay forma de saber si el SWF es una versión de depuración o lanzamiento. –

+0

@PeterLee Puede ser un reproductor de depuración pero no una versión de depuración del swf. Una compilación de depuración contiene información del número de línea en los rastreos de la pila. – TheBrain

11
+0

Exactamente esto, excepto que es una propiedad, no un método, por lo que los paréntesis deberían eliminarse. – hasseg

+0

Buena captura, fija :) – Antti

+0

¡Oh, _snap_! ¡Gracias! – aaaidan

Cuestiones relacionadas