Pregunta

En un MATLAB puede utilizar dbstack para recuperar la pila de llamadas en el momento actual, sin embargo dbstack no está disponible en las versiones independientes compilado de programas Matlab, ¿existe una alternativa para conseguir la pila de llamadas, o al menos la función de llamar la corriente ¿función? Quiero escribir una función de instalación que necesita saber para quien se le llamaba, pero una pila de llamadas completa serían preferibles.

¿Fue útil?

Solución

Aquí es donde destacan las soluciones hasta ahora:

  • Como se ha mencionado, la función DBSTACK en la lista de de funciones que no son compatibles con el compilador de MATLAB , por lo que no se puede utilizar.
  • También mencionado en un comentario de que a pesar de que la función EVALIN no está en la lista de funciones no soportado su compilador todavía no permitirá que lo uses. Que terminó rechazando algunas de las soluciones anteriores que he sugerido.
  • tener que mantener su propia traza de la pila por el paso de argumentos a lo largo de la cadena de llamadas de función (o, posiblemente, almacenándolos en un variable global) no es una opción ideal debido a la complejidad y el trabajo adicional que se necesitaría para mantener.

Sin embargo, tengo una más posible solución que creo que es el "más limpio", sin embargo: el uso de los mecanismos de gestión de errores para obtener la traza de ejecución. Esto puede variar en función de la versión que está utilizando MATLAB ...

MATLAB Versiones 7.5 (R2007b) y más reciente:

Las nuevas capacidades de gestión de errores en la forma de la clase MException eran href="http://www.mathworks.com/access/helpdesk/help/techdoc/rn/brb410y-1.html#brb79wb-1" introducido en Version 7.5 . Puede obtener información sobre el seguimiento de la pila de objetos MException creando y lanzando una excepción "ficticia", entonces inmediatamente la captura de él y acceder a la campo stack . Si lo hace la siguiente en una función:

try
  throw(MException('phony:error',''));
catch ME
  callerStack = {ME.stack.name};
end

A continuación, el callerStack serie de células contendrá los nombres de todas las funciones de la pila de llamadas, con el nombre de la función actual en el primer elemento y el más alto nombre de la persona que llama en el último elemento.

MATLAB Versiones 7.1 (R14SP3) a través de 7,4 (R2007a):

Para estas versiones anteriores se puede utilizar el ERROR función para lanzar un error y la función LastError a capturar el error y obtener la información de pila:

try
  error('phony:error','');
catch
  s = lasterror;
  callerStack = {s.stack.name};
end

MATLAB Versiones 7.0.4 (R14SP2) y versiones anteriores:

Por desgracia, la LastError única función comenzado a regresar información de rastreo de pila en MATLAB versión 7.1 , por lo que no hay una versión de las soluciones anteriores que puedo llegar a las versiones anteriores de MATLAB.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top