Question

Dans Matlab, on peut utiliser dbstack pour récupérer la pile d'appels à la version actuelle, mais dbstack n'est pas disponible en mode autonome compilé des programmes de Matlab, est-il une alternative pour obtenir la pile d'appels, ou tout au moins la fonction d'appel du courant une fonction? Je veux écrire une fonction installation qui a besoin de savoir par qui il a été appelé, mais une pile d'appel complet serait préférable.

Était-ce utile?

La solution

Voici où les solutions se tiennent à ce jour:

  • Comme vous l'avez mentionné, la fonction DBSTACK sur la des fonctions qui ne sont pas pris en charge par le compilateur Matlab , donc il ne peut pas être utilisé.
  • Vous avez également mentionné dans un commentaire que, même si la fonction Evalin ne figure pas sur la liste des fonctions non pris en charge votre compilateur encore ne vous permettra de l'utiliser. Cela a fini par rejeter quelques-unes des solutions précédentes je.
  • Avoir de maintenir votre propre pile trace en fournissant des arguments le long de la chaîne d'appels de fonction (ou éventuellement en les stockant dans un classe MException ont été introduit dans version 7.5 . Vous pouvez obtenir des informations sur la trace de la pile d'objets MException en créant et en lançant une exception « factice », puis immédiatement l'attraper et l'accès à la champ stack . Si vous effectuez les opérations suivantes en fonction:

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

    Ensuite, la matrice de cellules callerStack contiendra les noms de toutes les fonctions de la pile d'appel, avec le nom de la fonction en cours dans le premier élément et le plus en haut le nom de l'appelant dans le dernier élément.

    Versions 7.1 Matlab (R14SP3) à 7.4 (version 2007a):

    Pour ces versions précédentes, vous pouvez utiliser le fonction pour lancer une erreur et la fonction lastError capturer l'erreur et obtenir les informations pile:

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

    Versions Matlab 7.0.4 (R14SP2) et versions antérieures:

    Malheureusement, lastError fonction n'a commencé à revenir pile trace des informations dans Matlab version 7.1 , donc il n'y a pas de version des solutions ci-dessus que je peux trouver pour les versions antérieures Matlab.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top