Hola
jaja
Eso es cierto... que el ordenador es listo, pero no adivino...
Sí, normalmente, los errores de comportamientos inesperados son por culpa de haber dicho al ordenador que haga algo que en el fondo no queríamos... Igual que los errores de código, evidentemente también se producen por haber hescrito algo de forma incorrecta (involuntariamente) claro.
Total, que en algunos casos el compilador detecta errores, pero en otros no... y me refiero a los de código. Variables no declaradas, etc, que para eso que yo sepa no hay funciones que devuelvan errores ni nada de eso....
Lo que yo quería evitar era que en esos casos, saliera el típico mensaje "Autoit error
Line -1..."
Pero veo que habrá que rebisar bien el código antes de poner a circular el programa, por siacaso jejeejejjeje
Salu2!
Tratar errores internos de Autoit
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: Tratar errores internos de Autoit
Cierto, lo de variables no declaradas es un problema que puede dar quebraderos de cabeza, aunque para ese caso concreto sí hay una solución, resulta que hay una opción que te obliga a declararlas, usa:
Opt("MustDeclareVars", 1)
al principio de tu programa, y no te dejará usar variables sin declarar.
Ale, un problema resuelto, ¿alguno más?
Piensa que la flexibilidad de un lenguaje interpretado, y el hecho de que los creadores del mismo quieren que el intérprete sea supersimple (para tener ejecutables pequeños) generan algunas simplificaciones y generalidades con las que hay que tener cuidado, por ejemplo con el hecho de que todas las variables pueden contener todos los tipos de datos, da igual que sea número, texto, lógico, etc... A veces metes un texto donde debería haber un número y como la variable igual se lo traga puedes armar un follón sin enterarte.
Esos errores (que son semánticos más que sintácticos) no son capturables, en realidad para AutoIt no es un error juntar textos, números y demás, aunque eso es una fuente de problemas...
Opt("MustDeclareVars", 1)
al principio de tu programa, y no te dejará usar variables sin declarar.
Ale, un problema resuelto, ¿alguno más?
Piensa que la flexibilidad de un lenguaje interpretado, y el hecho de que los creadores del mismo quieren que el intérprete sea supersimple (para tener ejecutables pequeños) generan algunas simplificaciones y generalidades con las que hay que tener cuidado, por ejemplo con el hecho de que todas las variables pueden contener todos los tipos de datos, da igual que sea número, texto, lógico, etc... A veces metes un texto donde debería haber un número y como la variable igual se lo traga puedes armar un follón sin enterarte.
Esos errores (que son semánticos más que sintácticos) no son capturables, en realidad para AutoIt no es un error juntar textos, números y demás, aunque eso es una fuente de problemas...
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Re: Tratar errores internos de Autoit
Hola
Si, tengo así configurado el autoit. lo de las variables era un ejemplo ...
por ejemplo
más difícil de arreglar
si hacemos condiciones con paréntesis, almenos a mí, sí me compila autoit el programa
pero al ejecutarlo, da un error si los paréntesis no están correctamente
otro caso, el de las funciones.... Llamamos una función no declarada y también en mi caso, compila, pero da un error.
Eso es , a lo que me refería ... y ¿Que me gustaría que hiciera autoit?
pues en vez de el mensaje estándar que muestra, poder poner un mensaje de error mío, por ejemplo
evidentemente, cerrar el programa después de aceptarlo, o incluso, hacer que el programa tubiera cierta inteligencia, y si detecta que llamas a una función no declarada, llamara a otra por defecto, hay mil cosas
A lo que me refería con C y C++, es que en lo poco que he tocado esos lenguajes, practicando y practicando, como no, alguna he liado al escribir código. Justo cosas como las que comentaba ahora. No declarar funciones, etc
en ese caso, el programa compilado con C o C++, lo que he visto es, que se ha cerrado con el típico mensaje de windows, para enviar informe de errores...
Quizá no sea lo mismo, pues los compiladores de esos lenguajes parece que verifican más el código que el de autoit, y es cierto que no te compilan los programas si faltan funciones etc etc... pero en alguna ocasión te prometo, que me ha pasado xDddd
Salu2!
Si, tengo así configurado el autoit. lo de las variables era un ejemplo ...
por ejemplo
más difícil de arreglar
si hacemos condiciones con paréntesis, almenos a mí, sí me compila autoit el programa
pero al ejecutarlo, da un error si los paréntesis no están correctamente
otro caso, el de las funciones.... Llamamos una función no declarada y también en mi caso, compila, pero da un error.
Eso es , a lo que me refería ... y ¿Que me gustaría que hiciera autoit?
pues en vez de el mensaje estándar que muestra, poder poner un mensaje de error mío, por ejemplo
evidentemente, cerrar el programa después de aceptarlo, o incluso, hacer que el programa tubiera cierta inteligencia, y si detecta que llamas a una función no declarada, llamara a otra por defecto, hay mil cosas
A lo que me refería con C y C++, es que en lo poco que he tocado esos lenguajes, practicando y practicando, como no, alguna he liado al escribir código. Justo cosas como las que comentaba ahora. No declarar funciones, etc
en ese caso, el programa compilado con C o C++, lo que he visto es, que se ha cerrado con el típico mensaje de windows, para enviar informe de errores...
Quizá no sea lo mismo, pues los compiladores de esos lenguajes parece que verifican más el código que el de autoit, y es cierto que no te compilan los programas si faltan funciones etc etc... pero en alguna ocasión te prometo, que me ha pasado xDddd
Salu2!
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: Tratar errores internos de Autoit
Pues Jonny, debo estar un poco tonto porque no te entiendo.
Lo de las funciones, si llamo a una función que no he definido a mí el compilador sí me da error, concretamente:
ruta_al_progrma.au3(42,11) : ERROR: mifuncion(): undefined function.
El 42,11 es la línea y el carácter exacto donde se ha encontrado la llamada.
Y debajo la línea donde hago la llamada, si hago ahí doble clic me manda automáticamente al sitio y todo.
¿Estamos hablando de funciones tuyas en Autoit o propias internas de AutoIt? En esos casos el compilador debe avisarte.
¿Estamos hablando de funciones externas, quizás de DLL, objetos COM, etc.? En esos casos puede que AutoIt sólo falle al ejecutarse, no al compilarse, ahí la cosa será ciertamente más peliaguda.
Acabo de comprobar que incluso las que se llaman indirectamente, por ejemplo con GuiRegisterMsg, si pongo el nombre de una función que no existe el compilador da error y tampoco llego a ejecutar el script...
¿Lo de los paréntesis te refieres a problemas en el agrupamiento o a paréntesis no balanceados?
Una vez más, si faltan o sobran paréntesis yo también obtengo error del compilador, ¿podrías poner un ejemplo concreto, porfa? ya tengo curiosidad.
¿Qué versiones estás usando? Yo tengo Autoit 3.3.0.0, o sea, la última NO beta, con Scite 1.78. El comprobador de sintaxis es concretamente el AU3Check versión 1.54.14.0
Sobre lo del C ¡tampoco lo entiendo! Ese lenguaje es verdaderamente compilado (genera código máquina, el AutoIt en realidad es interpretado, no me extiendo para no hacerlo largo pero su "compilación" es muchiiiisimo más ligera, menos estricta, como efectivamente habías intuido). Aún se me hace más raro que llames a una función en C (C++, Java, Pascal, etc) no declarada ¡y te compile!.
Como mucho si es una función enlazada dinámicamente (por ejemplo en una dll) y al ejecutar el programa la dll no está disponible...
Anda porfa pon ejemplos de código AutoIt (de C no, que no es el foro ) con errores de estos que el compilador pasa a ver si a mí me pasan (funciones llamadas y no declaradas y lo de los paréntesis, y si se te ocurre otra pues también). La verdad es que me tienes intrigado.
Saludosssss
Lo de las funciones, si llamo a una función que no he definido a mí el compilador sí me da error, concretamente:
ruta_al_progrma.au3(42,11) : ERROR: mifuncion(): undefined function.
El 42,11 es la línea y el carácter exacto donde se ha encontrado la llamada.
Y debajo la línea donde hago la llamada, si hago ahí doble clic me manda automáticamente al sitio y todo.
¿Estamos hablando de funciones tuyas en Autoit o propias internas de AutoIt? En esos casos el compilador debe avisarte.
¿Estamos hablando de funciones externas, quizás de DLL, objetos COM, etc.? En esos casos puede que AutoIt sólo falle al ejecutarse, no al compilarse, ahí la cosa será ciertamente más peliaguda.
Acabo de comprobar que incluso las que se llaman indirectamente, por ejemplo con GuiRegisterMsg, si pongo el nombre de una función que no existe el compilador da error y tampoco llego a ejecutar el script...
¿Lo de los paréntesis te refieres a problemas en el agrupamiento o a paréntesis no balanceados?
Una vez más, si faltan o sobran paréntesis yo también obtengo error del compilador, ¿podrías poner un ejemplo concreto, porfa? ya tengo curiosidad.
¿Qué versiones estás usando? Yo tengo Autoit 3.3.0.0, o sea, la última NO beta, con Scite 1.78. El comprobador de sintaxis es concretamente el AU3Check versión 1.54.14.0
Sobre lo del C ¡tampoco lo entiendo! Ese lenguaje es verdaderamente compilado (genera código máquina, el AutoIt en realidad es interpretado, no me extiendo para no hacerlo largo pero su "compilación" es muchiiiisimo más ligera, menos estricta, como efectivamente habías intuido). Aún se me hace más raro que llames a una función en C (C++, Java, Pascal, etc) no declarada ¡y te compile!.
Como mucho si es una función enlazada dinámicamente (por ejemplo en una dll) y al ejecutar el programa la dll no está disponible...
Anda porfa pon ejemplos de código AutoIt (de C no, que no es el foro ) con errores de estos que el compilador pasa a ver si a mí me pasan (funciones llamadas y no declaradas y lo de los paréntesis, y si se te ocurre otra pues también). La verdad es que me tienes intrigado.
Saludosssss
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Re: Tratar errores internos de Autoit
Hola
Si, es cierto.
Lo mejor será poner ejemplos así, lo vereis mejor.
Aclaro primero, que uso la misma versión que tú de autoit (3.3.0.0) y bueno, yo no uso scite para escribir el código. Costumbre, desde que empecé con esto de la programación, con html y php, que fué de lo primero que toqué, programo con el block de notas. Pero no creo que esto influya en éste caso. Escribo el código y luego compilo el programa con la opción "Compile script" del menú contextual.
Esto debería ser (supongo) lo mismo que escribir el código en Scite y compilar desde ahí ¿No?
Os he subido un pequeño rar, que contiene 4 archivos. Se trata de 2 ejemplillos que muestran lo que vengo comentando de las funciones no declaradas y paréntesis mal expresados.
http://www.sendspace.com/file/zyngj0
Ambos tienen el código fuente para que lo veais si quereis y el programa compilado (para que veais que realmente almenos a mí me deja compilar con ciertos errores).
Prueba_Errores_Internos_Funcion.au3, es el ejemplo que muestra un programa que llama a una función no declarada. para que veais el funcionamiento, he incluido un Msgbox() antes de que se produzca el error, igual que en Prueba_Errores_Internos_Parentesis.au3, que es un ejemplo que muestra un programa en el que hay una condición expresada con paréntesis, a la que le falta cerrar uno de ellos.
A ver si con esto comprendes mejor a lo que me refiero.
Salu2!
Si, es cierto.
Lo mejor será poner ejemplos así, lo vereis mejor.
Aclaro primero, que uso la misma versión que tú de autoit (3.3.0.0) y bueno, yo no uso scite para escribir el código. Costumbre, desde que empecé con esto de la programación, con html y php, que fué de lo primero que toqué, programo con el block de notas. Pero no creo que esto influya en éste caso. Escribo el código y luego compilo el programa con la opción "Compile script" del menú contextual.
Esto debería ser (supongo) lo mismo que escribir el código en Scite y compilar desde ahí ¿No?
Os he subido un pequeño rar, que contiene 4 archivos. Se trata de 2 ejemplillos que muestran lo que vengo comentando de las funciones no declaradas y paréntesis mal expresados.
http://www.sendspace.com/file/zyngj0
Ambos tienen el código fuente para que lo veais si quereis y el programa compilado (para que veais que realmente almenos a mí me deja compilar con ciertos errores).
Prueba_Errores_Internos_Funcion.au3, es el ejemplo que muestra un programa que llama a una función no declarada. para que veais el funcionamiento, he incluido un Msgbox() antes de que se produzca el error, igual que en Prueba_Errores_Internos_Parentesis.au3, que es un ejemplo que muestra un programa en el que hay una condición expresada con paréntesis, a la que le falta cerrar uno de ellos.
A ver si con esto comprendes mejor a lo que me refiero.
Salu2!
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: Tratar errores internos de Autoit
Muy bien, muchas gracias, así sí que lo veo.
Pues bien, entonces lo que creo que está pasando es que las opciones del compilador están tan relajadas que te pasa esos errores y te deja hacer el exe, porque te puedo decir que a mí el Scite NO ME DEJA.
Para el primero me dice "ERROR: ProduceError(): undefined function" y para el segundo "ERROR: unbalanced paranthesis expression", y luego se para y no hace el exe.
Lo curioso es que desde el menú contextual que usas, compila incluso con la opción "Compile with options" que es donde puedes activar el Au3Check (que es lo que comprueba los errores).
Vale, lo que estoy viendo, es que el compilador pasa de errores, él compila lo que le pases (lo he hecho ejecutando a mano desde la línea de comandos). Primero hay que pasar el comprobador de sintaxis, que es un programa diferente (Au3Check), ahí sí falla... Por lo visto el compilador en sí (Aut2Exe) asume que le pasas un programa correcto.
Me temo que "Compile with options" es inútil porque sí pasa el chequeador, pero debe estar enviando los errores a la consola y no se ven, porque si no no lo entiendo, y lo peor de todo es que luego hace el exe aunque tenga errores. Y eso ni más ni menos es lo que te está haciendo la puñeta, porque haciéndolo así seguramente AutoIt sí ve los errores (pues veo que efectivamente ejecuta el Au3Check) ¡pero pasa de ellos y compila igualmente!
Entonces te recomiendo, o usar el chequeador a mano desde la línea de comandos para ver si hay errores... ¡o usar Scite!
Si por ejemplo ejecuto a mano el chequeador:
D:\>Au3Check Prueba_Errores_Internos_parentesis.au3
me sale:
AutoIt3 Syntax Checker v1.54.8 Copyright (c) Tylo 2007
D:\Prueba_Errores_Internos_parentesis.au3(3,26) : ERROR: unbalanced paranthesis expression.
If (($A==10) And ($B<20) Then
~~~~~~~~~~~~~~~~~~~~~~~~~^
Prueba_Errores_Internos_parentesis.au3 - 1 error(s), 0 warning(s)
Como veo que hay errores tendrías que arreglarlos hasta que el chequeador no dé errores, y luego habría que compilar con Au2Exe. La verdad, hacer todo esto "a mano" cada vez que cambias una cosita en el programa se puede hacer un poco engorroso.
Sinceramente, quedarás agradablemente impresionado con Scite, te hará la vida mucho más fácil, aunque sólo lo uses en plan fácil para que te compile o para buscar en la ayuda de AutoIt. Inténtalo y recuerda que si tienes problemas con él estaremos encantados de ayudarte en este foro. No hace falta ser un experto, yo seguramente no uso ni el 20% de lo que Scite puede darme, pero me es mucho más cómodo que escribir "a ciegas" en el notepad.
Una cosa, para empezar a trabajar con scite en AutoIt, hay que guardar el script como au3 antes de poder chequear, compilar, etc..., porque Scite trabaja con muchos lenguajes y si no pones nombre al archivo que estás editando no sabe de qué tipo es.
¡Ah!, mejor te pones la versión completa, AutoIt viene con una versión Lite muy reducida. La puedes descargar desde la página de descargas de AutoIt:
http://www.autoitscript.com/autoit3/downloads.shtml
Es lo que se refiere como "AutoIt Script Editor"
Que quede claro que no tengo nada que ver con los de Scite, no estoy vendiendo nada. Para empezar es gratuito. Yo simplemente uso ese porque trabajan estrechamente con la gente de Scite y está muy integrado. Veo en la página que "coloreadores de código" hay también para TextPad, Crimson Editor y PSPad. Pero Scite está preparado para colorear el código y muchísimo más...
¡Ya nos dirás!
Pues bien, entonces lo que creo que está pasando es que las opciones del compilador están tan relajadas que te pasa esos errores y te deja hacer el exe, porque te puedo decir que a mí el Scite NO ME DEJA.
Para el primero me dice "ERROR: ProduceError(): undefined function" y para el segundo "ERROR: unbalanced paranthesis expression", y luego se para y no hace el exe.
Lo curioso es que desde el menú contextual que usas, compila incluso con la opción "Compile with options" que es donde puedes activar el Au3Check (que es lo que comprueba los errores).
Vale, lo que estoy viendo, es que el compilador pasa de errores, él compila lo que le pases (lo he hecho ejecutando a mano desde la línea de comandos). Primero hay que pasar el comprobador de sintaxis, que es un programa diferente (Au3Check), ahí sí falla... Por lo visto el compilador en sí (Aut2Exe) asume que le pasas un programa correcto.
Me temo que "Compile with options" es inútil porque sí pasa el chequeador, pero debe estar enviando los errores a la consola y no se ven, porque si no no lo entiendo, y lo peor de todo es que luego hace el exe aunque tenga errores. Y eso ni más ni menos es lo que te está haciendo la puñeta, porque haciéndolo así seguramente AutoIt sí ve los errores (pues veo que efectivamente ejecuta el Au3Check) ¡pero pasa de ellos y compila igualmente!
Entonces te recomiendo, o usar el chequeador a mano desde la línea de comandos para ver si hay errores... ¡o usar Scite!
Si por ejemplo ejecuto a mano el chequeador:
D:\>Au3Check Prueba_Errores_Internos_parentesis.au3
me sale:
AutoIt3 Syntax Checker v1.54.8 Copyright (c) Tylo 2007
D:\Prueba_Errores_Internos_parentesis.au3(3,26) : ERROR: unbalanced paranthesis expression.
If (($A==10) And ($B<20) Then
~~~~~~~~~~~~~~~~~~~~~~~~~^
Prueba_Errores_Internos_parentesis.au3 - 1 error(s), 0 warning(s)
Como veo que hay errores tendrías que arreglarlos hasta que el chequeador no dé errores, y luego habría que compilar con Au2Exe. La verdad, hacer todo esto "a mano" cada vez que cambias una cosita en el programa se puede hacer un poco engorroso.
Sinceramente, quedarás agradablemente impresionado con Scite, te hará la vida mucho más fácil, aunque sólo lo uses en plan fácil para que te compile o para buscar en la ayuda de AutoIt. Inténtalo y recuerda que si tienes problemas con él estaremos encantados de ayudarte en este foro. No hace falta ser un experto, yo seguramente no uso ni el 20% de lo que Scite puede darme, pero me es mucho más cómodo que escribir "a ciegas" en el notepad.
Una cosa, para empezar a trabajar con scite en AutoIt, hay que guardar el script como au3 antes de poder chequear, compilar, etc..., porque Scite trabaja con muchos lenguajes y si no pones nombre al archivo que estás editando no sabe de qué tipo es.
¡Ah!, mejor te pones la versión completa, AutoIt viene con una versión Lite muy reducida. La puedes descargar desde la página de descargas de AutoIt:
http://www.autoitscript.com/autoit3/downloads.shtml
Es lo que se refiere como "AutoIt Script Editor"
Que quede claro que no tengo nada que ver con los de Scite, no estoy vendiendo nada. Para empezar es gratuito. Yo simplemente uso ese porque trabajan estrechamente con la gente de Scite y está muy integrado. Veo en la página que "coloreadores de código" hay también para TextPad, Crimson Editor y PSPad. Pero Scite está preparado para colorear el código y muchísimo más...
¡Ya nos dirás!
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Re: Tratar errores internos de Autoit
Hola
Puf, ahora entiendo...
A mí, me parecía muy raro que autoit compilara habiendo errores... pero de siempre se lo he visto hacer...
Si, realmente hacer todo eso a mano es un tostón jejejeje
en ese caso, quizá tenga que pensar en usar scite jejeje.
Tranquilo, Me lo han dicho más veces por aquí, que debería usarlo, por todo lo que ofrece...
Lo que no sabía, es que trabajara con más lenguajes jejejeje
Salu2!
Puf, ahora entiendo...
A mí, me parecía muy raro que autoit compilara habiendo errores... pero de siempre se lo he visto hacer...
Si, realmente hacer todo eso a mano es un tostón jejejeje
en ese caso, quizá tenga que pensar en usar scite jejeje.
Tranquilo, Me lo han dicho más veces por aquí, que debería usarlo, por todo lo que ofrece...
Lo que no sabía, es que trabajara con más lenguajes jejejeje
Salu2!