FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Ejecución de cógido solo en IDE
Cuando estoy en un entorno de desarrollo uso la directiva {$DEFINE DEBUG} para
habilitar ciertas partes del código y en el momento de compilar elimino dicha línea para que las partes especiales no sean incluídas. No se si me explico, por las dudas incluyo un ejemplo. Código:
unit ULogin; {$DEFINE DEBUG} ... procedure TfrmLogin.Label1Click(Sender: TObject); begin leUsuario.Text := 'MiUsuario'; leClave.Text := 'MiClave'; end; procedure TfrmLogin.FormShow(Sender: TObject); begin {$IFDEF DEBUG} Label1.Visible := True; {$ELSE} Label1.Visible := False; {$ENDIF} end; y contraseña al hacerle un clic. En un entorno de desarrollo la directiva de compilación $DEFINE me habilita el label y en el momento de pasar a producción elimino la directiva para que el label no sea habilitado. A pesar de que el usuario MiUsuario con clave MiClave no existen en el entorno de producción no es deseable que por un olvido al compilar los usuarios finales accedan a esta funcionalidad. Mi pregunta es, ¿conocen alguna forma más flexible para que cierta porción de código solo se encuentre disponible dentro del IDE y desaparezca una vez compilada la aplicación? Gracias por todo.
__________________
"Fools are the only folks on earth who can absolutely count on getting what they deserve" S.K. |
#2
|
||||
|
||||
Cita:
Primero quiero aclararte que no me parece una práctica muy prolija que digamos, igualmente se me ocurre, solución súper básica, que es hacer algo como:
Y tener definido en el ini ese valor de parámetro, si te olvidas de compilarlo de otra forma, te darás cuenta en cuanto lo instales, por los mismos usuarios!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
||||
|
||||
Hola,
Se me ocurre que puedes definir la directiva "DEBUG" a nivel de proyecto: Project > Options > Conditionals. Y que por otro lado, en el archivo "dpr" escribieras algo así: De ese modo, cuando compiles con la directiva "DEBUG" podrás ver un mensaje en donde aparecen los errores y advertencias al compilar, ya sabes. Sería cuestión, esto sí, de estar pendiente del mensaje a la hora de compilar. Claro que no sé hasta qué punto lo que digo tiene que ver con lo que tú hubieras esperado por una respuesta más o menos razonable. El caso es que el tema me parece interesante y no he podido dejar de meter baza, como suele decirse. |
#4
|
||||
|
||||
Me gusta la solución que ofrecés, por lo menos tengo una alerta si me olvido de sacar la porción de código.
De todas formas tiene que haber una forma de especificar que una porción de código solo puede ser usada en el IDE, existe para el uso de packages.
__________________
"Fools are the only folks on earth who can absolutely count on getting what they deserve" S.K. |
#5
|
||||
|
||||
Si puedes averiguar si el IDE esta abierto, si la aplicación se esta debugueando.... pero en ambos casos, tu código de debug estará compilado de todos modos, y que este el IDE abierto o este en modo Debug, no es ninguna garantía de seguridad!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#6
|
||||
|
||||
Hola,
Cita:
Cita:
¿Cómo puede saber Delphi si el proyecto que acabas de compilar lo usarás para "debugear" o se lo enviarás a un usuario final? Yo creo que no puede saberlo y que para eso, entre otras cosas, tenemos las directivas de compilación. Es cierto que puede olvidársete quitar o poner una directiva de compilación que haga que los resultados (el código compilado) no sean los esperados... pero, me temo que tendrás que estar pendiente de que no ocurra algo así: por ejemplo como te digo más arriba y/o siguiendo la idea de Federico. "Debugear" (mientras se desarrolla) es más o menos habitual, pero, cuando uno compila un proyecto para su posterior distribución ha de estar pendiente de ciertas cosas y una de ellas puede ser justamente la del control de las directivas de compilación. De todos modos podrías comentar lo que dices de los "packages". Gracias. |
#7
|
||||
|
||||
Gracias por todas las aclaraciones, no eran necesarias pero aclaran un poco más esta consulta.
Por uso en el IDE y debuggeando me refiero a ejecutar la aplicación desde el IDE mismo con F7, F8 o F9. Si bien es en definitiva compilada y se trapean los breakpoints y demás, permite al desarrollador un seguimiento de las sentencias que se van ejecutando. Mi consulta, en definitiva, es si existe alguna directiva (opción o cualquier otra cosa) que me permite habilitar una porción de código mientras la aplicación se ejecuta desde el IDE y que, una vez compilada (compiled o built en inglés) ya no se encuentre disponible. Pordón por tantas consultas tan confusas, tal vez no se expresar exactamente lo que necesito.
__________________
"Fools are the only folks on earth who can absolutely count on getting what they deserve" S.K. |
#8
|
||||
|
||||
Cita:
Lo que mencionas acerca de los paquetes no es lo que buscas. En ese caso se trata de código que sólo se ejecuta durante el diseño, no cuando se está ejecutando la aplicación, sea desde el IDE o no. Es decir, hay una diferencia entre lo que se ejecuta en el IDE y lo que se ejecuta desde el IDE. // Saludos |
#9
|
|||
|
|||
:) haber si entiendo
si no me equiboco quieres que solo funcione cuando estes ejecutandolo desde delphi...
bueno pues puedes verificar si se esta ejecutando delphi.. mmm puedes buscar en el foro como detectar las aplicaciones que se estan ejecutando... o quiza en la seccion de trucos mmm si no me equiboco en los de IDE venga algo que te pueda servir. |
#10
|
||||
|
||||
El gran problema de lo que planteas, me parece, no es que quede el código, poruque igual la función no la van a poder ejecutar dado que tu label esta invisible.
Pero tu clave si se podrá ver en un editor hexadecimal, por lo que podrias modificar tu aplicación asi:
donde "Desencriptar" sea una función que desencrite tu clave, y en un editor hexa sólo se vera tu código encriptado. Obviamente, esta función no debe ser pública.
__________________
[Crandel] |
#12
|
||||
|
||||
Con respecto a esto:
Cita:
Cita:
Cita:
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#13
|
||||
|
||||
Cita:
Si bien es código que no tendría ningún uso práctico en un entorno de producción no deberían aparecer comportamientos raros en la aplicación.
__________________
"Fools are the only folks on earth who can absolutely count on getting what they deserve" S.K. |
#14
|
||||
|
||||
Cita:
// Saludos |
#15
|
||||
|
||||
Cita:
__________________
[Crandel] |
#16
|
||||
|
||||
Solución final
Al final me voy a quedar con esta opción. Controlo si la directiva DEBUG está definida y en caso de que así sea no permito la compilación.
Código:
{$IFDEF DEBUG} {$MESSAGE FATAL 'Directiva DEBUG definida, no se permite la compilación'} {$IFEND}
__________________
"Fools are the only folks on earth who can absolutely count on getting what they deserve" S.K. |
#17
|
||||
|
||||
Pero si usas {$message fatal}, ¿cómo vas a hacer para compilar cuando sí necesites el "debug"? Tendrás que quitar esta directiva y luego acordarte de ponerla nuevamente con lo que volvemos al principio.
// Saludos |
#18
|
||||
|
||||
Resp
Segun lo que he visto.
Por ejemplo si creas un componente. Solo debes preguntar si el compoenete esta es doseño. Como.Designer(Verifica bien quisas se escriba de otra manera). Asi puedes ver si estas en diseño o no. Pero lo que quieres hacer creo que compilacion condiconal no se puede. Ya esta la debes hacer a mano.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa. |
|
|
|