Me gusta la idea de "dbstop if display", sin embargo, esta no es una opción dbstop que yo sepa.
Si todo lo demás falla, todavía hay esperanza. Mlint es una buena idea, pero si hay muchos miles de líneas y muchas funciones, entonces es posible que nunca encuentre al delincuente. Peor aún, si este código ha sido escrito de manera descuidada, aparecerán tropecientos millones de indicadores de mlint. ¿Cómo lo limitarás?
Una solución es mostrar su camino hacia allí. Sobrecargaría la función de visualización. Solo temporalmente, pero esto funcionará. Si la salida es objeto de dumping a la línea de comandos como
ans =
stuff
o como
foo =
stuff
A continuación, se ha escrito con pantalla. Si sale como
stuff
entonces disp es el culpable. ¿Por qué eso importa? Sobrecargar al ofensor.Cree un nuevo directorio en algún directorio que se encuentre en la parte superior de su ruta de búsqueda de MATLAB, llamado @double (suponiendo que el resultado sea una variable doble. Si es un carácter, necesitará un directorio @char) NO coloque el @ doble directorio en la ruta de búsqueda de MATLAB, simplemente colóquelo en algún directorio que esté en su ruta.
Dentro de este directorio, poner un nuevo archivo-m llamado disp.m o display.m, dependiendo de su determinación de lo que ha hecho la salida de línea de comandos. El contenido del archivo-m será una llamada a la función interna, lo que le permitirá a continuación, llamar a la versión incorporada de disp o muestre en la entrada.
Ahora, establecer un punto de depuración dentro de la nueva función. Cada vez que se genera salida en la pantalla, se llamará a esta función. Si hay varios eventos, es posible que deba utilizar el depurador para permitir que continúe el procesamiento hasta que el delincuente quede atrapado. Eventualmente, este proceso atrapará la línea ofensiva. Recuerde, usted está en el depurador! Utilizar el depurador para determinar qué función llamada disp, y dónde. Puede salir de disp o display, o simplemente mirar los contenidos de dbstack para ver qué ha sucedido.
Cuando todo está hecho y reparar el problema, elimine este directorio extra, y la función DISP/pantalla se pone en ella.
oh, odio eso. Desearía que fuera posible tener una configuración global en MATLAB para arrojar un error siempre que encuentre enunciados sin punto y coma. –
Terminó siendo un disp (str2num (FOO)); enterrado profundamente en el código. El truco fue darse cuenta de que la salida era la misma todo el tiempo, buscando a través de todos los 200Gig de archivos de datos y encontrando ese valor. Averiguar qué variable interna tenía ese valor, y luego rastrear cada referencia en el código con ese valor. Demasiadas líneas de código, con demasiados errores de pelusa para usar los enfoques propuestos. ¡¡¡¡GRACIAS!!!! – John
Sí, pero mi truco de sobrecargar disp podría haber funcionado rápidamente. –