stephan35 Posté(e) le 10 décembre 2007 Posté(e) le 10 décembre 2007 Bonjour à tous, Dans tous mes sources , j'utilise énormément de fonctions, et pour faciliter le débug, je cherche à afficher des informations passées dans cette fonction: (defun @macro (a b c / ) (print a) (print b) (princ c) ) Jusque là facile ... :D Mais lorsque j'execute la macro (@macro "1" "2" "3") J'obitiens : 123 Je voudrais affichier un truc du genre : (@Macro "1" "2" "3") .... Y aurais pas une fonctions qui récupère le tout .... :casstet: Merci ...
Bred Posté(e) le 10 décembre 2007 Posté(e) le 10 décembre 2007 Salut,(princ (strcat "@macro" a b c))(attention au type de a b c... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
stephan35 Posté(e) le 10 décembre 2007 Auteur Posté(e) le 10 décembre 2007 Merci bred pour ta rapidité ! :D Mea Cupla ... Je me suis mal exprimé !!!! Sait-on récupérer la macro en cours et les paramètres qui lui sont passés .... (defun @macro (a b c / ) (print @macro) ; ici on affiche ce que l'on a passé ? ) !@macro # # Je ne sais pas si c'est exploitable ! :casstet: Sinon j'ai cette solution : (defun debug (a /) (print (vl-prin1-to-string a)) (eval a) ) (debug '(@macro 1 2 3)) Mais elle m'obilge à tout réécrire :mad: Souhaitant avoir été plus clair dans mes intentions ... ;) Merci ... !
(gile) Posté(e) le 10 décembre 2007 Posté(e) le 10 décembre 2007 Excuse moi, mais personnellement, je ne comprends pas ce que tu veux faire. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
stephan35 Posté(e) le 10 décembre 2007 Auteur Posté(e) le 10 décembre 2007 Zut ! Moi qui pensait avoir éclaicit les choses ..... :calim: J'ai environ 350 fonctions .... et ça devient un sac de noeud pour trouver la source du problème en cas de bug .... Donc, j'ai 2 solutions : 1 - Réécrire l'appel de chaque fonction pour y intégrer le débug, soit ~ 3500 lignes2 - Soit modifier les 350 fonctions pour y intégrer le débug. Je choisi l'option 2 Maintenant, j'ai 2 options (et peut-être malheureusement qu'une seule) 1 - Ecrire le paramêtre passé dans chaque fonction avec un (vl-prin1-to-string param)2 - Trouver une autre solution plus simple si elle existe ? Je tente l'option 2 Je cherche la commande ou fonction qui retrouve , de façon automatique , les paramètres passés en argument dans la fonction, ou la fonction qui retourne la dernière instruction lisp. Genre : (defun @macro (a b c / ) (print (commandequejeneconnaispas)) ; ici on affiche ce que l'on a passé ? ) (@macro "a" "b" "v") Me retourne :(@macro "a" "b" "v") PS : si personne m'a compris, je laisse tomber ! et je passe à l'option 1. Merci ..... (avec peu ou plus d'espoir) ;)
bonuscad Posté(e) le 10 décembre 2007 Posté(e) le 10 décembre 2007 Et la fonction (trace) ? ex: (trace @macro) et (untrace) pour arreter le tracage de la fonction. (untrace @macro] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
stephan35 Posté(e) le 10 décembre 2007 Auteur Posté(e) le 10 décembre 2007 Merci bonuscad, La l'instruction doit être lancé avant l'appel de la fonction, or pour lancer un debug global sur toutes mes fonction un faudrait faire une supermacro qui trace toutes mes fonctions avant leur appel : (defun @macro (a b c / ) (trace @macro) (print (vl-prin1-to-string a)) ; ici on affiche ce que l'on a passé ? ) (@macro "a" "b" "v") Ne marche qu'au deuxieme lancement ! Par contre, oui effectivement autocad affiche : (@MACRO "a" "b" "v") :D Personne ne sait ou c'est stocké ???? On peut pas le récupéré .... ??? :casstet: Merci !!!
Bred Posté(e) le 10 décembre 2007 Posté(e) le 10 décembre 2007 Re,ça ne fonctionne pas (et je ne vois pas la raison), mais c'est un truc du genre : (defun c:test () (Marq '(additionner 2 3)) ) (defun additionner (a b) (+ a b) ) (defun Marq (f / fonc) (foreach n f (setq fonc (append fonc (list n)))) (fonc) ) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
stephan35 Posté(e) le 10 décembre 2007 Auteur Posté(e) le 10 décembre 2007 C'est peut-être ça que tu voulais faire bred ??? (defun Marq (f / fonc) (foreach n f (setq fonc (append fonc (list n))) ) (eval fonc) ) Mais en rajoutant ça en plus : (defun Marq (f / fonc) (foreach n f (setq fonc (append fonc (list n))) ) (prompt (strcat "\nEvaluation de : " (vl-prin1-to-string fonc))) (eval fonc) ) Mais ça me refait modifier tous mes appels de fonctions ..... :casstet:
Bred Posté(e) le 10 décembre 2007 Posté(e) le 10 décembre 2007 C'est peut-être ça que tu voulais faire bred ???Oui ! c'est ça, j'avais zapper eval !Et ce n'est pas ça que tu veux ?Mais ça me refait modifier tous mes appels de fonctions ..... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
stephan35 Posté(e) le 10 décembre 2007 Auteur Posté(e) le 10 décembre 2007 AAARRRGGGHHHH ! La boulette ! !!!! : Quelqu'un sait évaluer les variables dans les fonctions ...... ???? (setq toto 3) (defun c:test () (Marq '(additionner 2 toto)) ) test : (additionner 2 toto) :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: Mais toto est égal à quoi !!!! ????? (La boulette !) (additionner 2 3) Aurait été idéeal ! C'est pas très pratique pour evaluer toto, surtout lorsque c'est une valeur imbriquer au nième niveau Quelqu'un saurait me calculer et me retourner le contenu de toto dans son évaluation ???? :casstet: :casstet: :casstet: :casstet: :casstet: Merci !!!!
stephan35 Posté(e) le 10 décembre 2007 Auteur Posté(e) le 10 décembre 2007 Et ce n'est pas ça que tu veux ? si si bred, on approche de ma vision idéale .... ;) Merci !
Bred Posté(e) le 10 décembre 2007 Posté(e) le 10 décembre 2007 Quelqu'un saurait me calculer et me retourner le contenu de toto dans son évaluation ????(defun Marq (f / fonc i) (setq i 0 fonc (list (car f))) (repeat (1- (length f)) (setq fonc (append fonc (list (eval (nth (setq i (1+ i)) f))))) ) (princ (strcat "\nEvaluation de : " (vl-prin1-to-string fonc))) (princ "\n") (eval fonc) ) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
stephan35 Posté(e) le 10 décembre 2007 Auteur Posté(e) le 10 décembre 2007 ça , c'est la classe !!!! ;) Merci BRED ! Et, sans vouloir abuser .... et pour reprendre ma première requête ....et le faire dans la macro qui est appelée, tu ne sais pas le faire , hein ? dit ? ;) Perso, je pense que non ! Il faudrait pouvoir intercepter l'interpreteur de commande, et afficher l'instruction lisp en cours, un truc vicieux, car ce serait peut-être récursif ... Encore merci BRED !
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant