Aller au contenu

Messages recommandés

Posté(e)

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 :

 

1

2

3

 

Je voudrais affichier un truc du genre :

 

(@Macro "1" "2" "3") ....

 

Y aurais pas une fonctions qui récupère le tout .... :casstet:

 

Merci ...

Posté(e)

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...

Posté(e)

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 ... !

Posté(e)

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 lignes

2 - 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) ;)

Posté(e)

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

Posté(e)

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 !!!

Posté(e)

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...

Posté(e)

 

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:

 

Posté(e)
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...

Posté(e)

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 !!!!

Posté(e)
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...

Posté(e)

ç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 !

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité