Para mí, dado que M no tiene un depurador incorporado, desperdicio el 50% de mi tiempo solo en la depuración, que podría haberse guardado si hubiera un depurador. El 50% de mi código de desarrollo son instrucciones de impresión, ya que sin ellas, estaré perdido para encontrar de dónde viene un error. (Esto también es malo, ya que demasiados mensajes de impresión en el código hacen que sea difícil ver el algoritmo en algún momento, se pone en el camino, pero no puede eliminarlo, ya que podría necesitarlo más adelante).
Me parece sorprendente que una herramienta de cómputo tan poderosa y flexible como M, todavía tenga un entorno de desarrollo relativamente menos avanzado. Cuando uso Matlab, me lleva unos segundos encontrar dónde está el error, usando el depurador.
Alguien podría decir usar Workbench para la depuración. Intenté usar para depurar una demostración Manipulate, y no puedo resolverlo. Demasiado complicado de usar. M necesita una compilación de depurador simple y fácil de usar (en el propio cuaderno, no en un programa separado) y con números de línea.
Ok, teniendo en cuenta la introducción anterior :), esto es lo que hago yo en respuesta a su pregunta:
tienen diferentes niveles de mensajes de depuración. nivel grueso, y nivel detallado. El nivel aproximado imprime solo un mensaje cuando ingresa una función y cuando existe la función.
Tengo un botón en la IU para usar para activar/desactivar la depuración (si está haciendo un programa basado en UI, de lo contrario estará en el código).
Utilice una función de depuración separada, donde se envía el mensaje de depuración antes de imprimirse. Allí, puede agregar un sello de tiempo a cada mensaje y demás antes de imprimir (también puede controlar si desea que los mensajes vayan al archivo de texto, desde un solo lugar). Resto de su código, simplemente llama a esta función de depuración con el mensaje para imprimir. Imprimo todo ahora en consola, no en el portátil actual.
Cada mensaje de depuración tiene el nombre de la función que lo llamó al inicio.
Si desea controlar la depuración a nivel de módulo, lo que hago, simplemente crea un indicador de depuración local dentro del Módulo y lo enciendo/apaga cada vez que quiero depurar ese módulo específico. Esta bandera de depuración local asume la configuración del indicador de depuración global. De esta forma, puedo depurar solo un módulo si quiero, y no el resto del código.
Hay muchas otras maneras de personalizar todo esto. Pero descubrí que si dedico más tiempo desde el principio a crear un buen sistema de mensajes de depuración, me ayuda a encontrar errores cuando es necesario.
Éstos son algunos vínculo útil
http://reference.wolfram.com/mathematica/guide/TuningAndDebugging.html
banco de trabajo depurador (si puede averiguar cómo utilizar para depurar manipular y dinámica, por favor hágamelo saber)
http://www.wolfram.com/products/workbench/features/debug.html
En v.8, también hay 'Assert' que es similar en cuanto imprime el mensaje en el fallo de la prueba, y se puede desactivar –
@Verbeia Sí, es cierto ... Pensé que las dos preguntas son tan cercanas que sería beneficioso fusionarlas y tener todas respuestas en el mismo lugar Ya sea que ese se haya fusionado en este o en el revés, no importa ... – Szabolcs
@Szabolcs vea el mensaje para usted en el chat – Verbeia