Localizando fallos difíciles de reproducir en los módems Cinterion TC65, XT65
Escrito por blogElectronica en 2.DISPOSITIVOS (práctico), 4.PROGRAMACIÓN, Comunic. GSM/GPRSSi desarrollas aplicaciones en Java para los módems gprs TC65, XT65 (o sus terminales MTX65 o MTX65+G distribuidos por Matrix), tal vez pueda interesarte en alguna ocasión debugar tu aplicación de la manera que te voy a indicar aquí.
Como ocurre (o debería ocurrir) al final del desarrollo de cualquier programa, hay una fase de test, una fase en el que se debe probar a fondo la aplicación en busca de cualquier tipo de error que hayamos podido cometer. Si lo errores en nuestra aplicación son fácilmente reproducibles los encontraremos de manera relativamente sencilla, pero en ocasiones puede haber errores que se deban a un cúmulo de cosas o debido a unas situaciones muy concretas que no se reproducen en el laboratorio y sí en la calle.
Depurar este tipo de problemas puede llegar a ser realmente complicado, ya que si se producen de forma muy ocasional son difíciles de localizar.
Una forma para intentar averiguar qué ocurre con un programa puede ser tener un hyperterminal conectado al puerto serie para ir guardando las trazas que vayamos sacando mediante System.out.println, pero no parece el método más adecuado para todas las situaciones ¿verdad? Un poco armatoste si tenemos que poner un PC en un coche o en una máquina de vending o donde sea que tengamos nuestro módem …
Una manera alternativa que nos permiten los modems Siemens / Cinterion es redirigir la salida estandard hacia un fichero, es decir, que en lugar de sacar las trazas por el puerto serie del equipo (al hacer un System.out.println) se volcarán en un fichero de texto de tipo log dentro de la memoria flash del módem. De esta manera cuando ocurra el suceso extraño podemos mirar los log e intentar ver en qué método o parte del programa o haciendo el qué tenemos el error. Es muy útil.
¿Y cómo se hace eso?
Pues con el super comando AT^SCFG. Con eso comando podemos especificar el destino de la salida estandard (en este caso definiremos un fichero, el tamaño del fichero, el nombre del fichero y el modo de almacenamiento.
Cuando definamos el tamaño del fichero hay que tener presente que realmente se crearán dos ficheros. Por ejemplo, si el nombre del fichero es log.txt, se crearán log.txt.0 y log.txt.1. Cuando log.txt.0 alcance la mitad del tamaño que hayamos especificado se empezará a escribir sobre log.txt.1. De igual forma, cuando log.txt.1 llegue a la mitad del tamaño especificado se escribirá sobre log.txt.0 y así sucesivamente de forma rotativa.
En cuanto al modo de almacenamiento tenemos dos modos. El de por derecto, “buffered” y el “secure”. Con “buffered” la salida no se escribe directamente en flash, sino que se almacena de forma temporal en un buffer intermedio (en RAM) y cuando toque (cuando lo diga un timer) se salvan los datos en Flash. En modo “secure” se escribe directamente a Flash. Depende del tipo de situación y la gravedad del problema deberemos de usar uno u otro modo.
¿Algún ejemplo?
Por supuesto, configurando el módem con:
AT^SCFG=”Userware/Stdout”,”FILE”,20000,”a:/log.txt”,”secure”
Si después, en algún momento desde nuestra aplicación java hacemos un:
…
System.out.println(“Hola”);
…
veremos como en A:/log.txt.0 tenemos el “Hola”.
Bueno, otro día más. Espero que esto pueda ayudar a alguno que tenga problemas difíciles de descubrir. Yo ahora me voy a poner un rato con una de las tareas que menos me gustan de todo el año, la renta. Y pensar que hay gente que disfuta haciendolas … (palabra que conozco a un par).
Post relacionados:
- Uso correcto de la Flash de los módems Cinterion TC65 y XT65 En muchas ocasiones podemos tener la necesidad de utilizar el...
- Ejemplo de FTP Java para módems gprs Cinterion TC65 y XT65 Posiblemente en alguna ocasión tengas que hacer un programita en...
- Memoria Ram y Flash de los módems TC65 y XT65 Últimamente me han preguntado bastante en relación a la memoria...
- Añadir datos a ficheros con módems Siemens-Cinterion desde java En bastantes ocasiones me ha llegado la pregunta de cómo...
- Compresión de archivos con J2ME en módems GPRS Siemens TC65 En muchas aplicaciones con módems GPRS es necesario almacenar datos...
Etiquetas: cinterion, j2me, java, mtx65, mtx65+g, Siemens, tc65, xt65
hola
Se puede redirgir la salida estandard a un socket, para poder debugear a distancia?
Salu2
Pua
si, si se puede
try{
//your code here
}
catch(exception ex)
{
fnSendBySocket(ex.message());
}
fnSendBySocket(String strMsg)
{
Global_InputStream.write(strMsg.getBytes());
}
Con algunos errores de sintaxis ¬¬