[Reflexion] SpawnScriptDebugger

Répondre
Partager Rechercher
Dans la 1.30, ya un truc nouveau, c'est le ScriptDebuggeur ou DebugServer.exe.
Franchement, plus j'essaie de l'utiliser et plus je trouve ça excellent même si j'ai pô vraiment tout bien pigé
Je viens de faire quelques tests, voilà ce qu'il en est:


Donc la première chose à faire est de cocher "Génère le Debug Information blabla" dans Outils/Options/Éditeur de scripts de l'édtieur.
Ensuite on met la fonction SpawnScriptDebugger dans le script que l'on souhaite débugger.
Voici mon script de test:
Code PHP:

void AinsiFontFontobject oPCint nVar) {
    return;
    }

void main() {
    
SpawnScriptDebugger();
    
object oPC GetLastUsedBy();
    
int nVar Random1000);
    
AinsiFontFontoPCnVar);
    } 

Donc avant de tester le module et bien entendu notre script, il faut démarrer le petit programme DebugServer. Ce programme se trouve dans le dossier utils.
Il n'y a véritablement rien à configurer. Laissez sur "On" et ne changez pô le port qui doit être différent de votre serveur, ce qui laisserait penser d'ailleurs que le debug est possible à distance...

Nous sommes donc prêt à tester notre module.
En solo, j'ai essayé et lorsque la fonction s'execute, une fenètre apparait vous demandant de basculer sur le programme de debug mais malheureusement mon écran reste figé sur ma partie.
Donc le mieux est d'essayer avec nwserver et de s'y connecter en local.

J'active le levier, la fonction SpawnScriptDebugger s'execute. À ce moment je remarque que le serveur est en "stand-by", il reste figé comme si il était tombé en panne.
Je bascule donc sur le programme de debug et voici ce que j'ai:
http://membres.lycos.fr/skanzo/images/scriptdebug.jpg

Il me donne la valeur de chaques variables pendant l'execution du script, la preuve avec mon Random. Perso, je trouve ça magique
On passe d'une ligne de code à l'autre en cliquant sur "passer" mais par contre quand on clique sur "entrer", il se passe pô grand chose.

Donc voilà, je vous invite à réflechir la-dessus, trouver des trucs sympô, des utilisations pratiques, des templates de scripts ou même cracker le code source gniarf gniarf :bouffon:

Je continu quelques tests
Citation :
Il me donne la valeur de chaques variables pendant l'execution du script
C'est réellement une éxecution pas à pas du script. Le programme de Debug ne lira pas les conditions fausses et repassera autant de fois qu'il le faut dans un boucle.
Pratique pour suivre l'acheminement d'un script.

Par contre, et dans un sens c'est peut-être préférable, il executera directement une fonction mais ne vous emmenera pô voir la bibliothèque où elle se trouve.

Je continu les tests
Citation :
Par contre, et dans un sens c'est peut-être préférable, il executera directement une fonction mais ne vous emmenera pô voir la bibliothèque où elle se trouve.
C'est à moitié faux

Vous pouvez voir l'exécution d'une de vos fonctions à condition que cette fonction se trouve dans le même script et de cliquer sur "Entrer" au bon moment.

Exemple:
Dans le script de test que j'ai utilisé précédemment, au moment où AinsiFontFont est en rouge (exactement comme sur l'image), il suffit de cliquer sur "Entrer" et ainsi on peut passer en revue l'exécution de la fonction AinsiFontFont elle-même.

Dans la partie la plus en bas du debugger, on aura même le droit d'avoir les valeurs renseignées dans la fonction. Dans l'exemple, on aura les valeurs de oPC et nVar.
Hmmm... J'ai beau réfléchir, j'ai du mal à me souvenir d'un aussi beau cadeau de la part de Bioware

Grâce à ça, il est 100% plus facile de débugger des scripts, même si ça devient par la même occasion un peu plus fastidieux.
Les erreurs d'étourderies, les plus courantes généralement , sont balayées en un passage du débuggeur

Les newbies n'ont plus aucune raison de se plaindre que leurs scripts ne marchent pas maintenant Dorénavant, je ne répondrais plus à personne possédant une version 1.30 ou supérieure
Visiblement, les bibliothèques peuvent quand même être affichées.

J'ai essayé un SpawnScriptDebugger dans un script utilisant les ressources d'une bibliothèque, du genre #include "magic_lib".

Il y a dans cette bibliothèque des constantes. Pour les voir, il suffit d'un double-clic en bas du debugger là ou c'est marqué "#globals" et zou, il vous emmène à la dernière constante à l'intérieur de la biblio.

Il vous fait même un topo de toutes les constantes trouvées


Tout ça me fait penser qu'il devrait y avoir un moyen d'aller voir l'exécution d'une fonction ailleurs que dans le même script.
Loool c tip cool ca

Je connais très bien ce genre de debug, il me fait penser sur le progiciel ou je bosse, c'est le même style de debug, je ne vais pas trop être dépayser lol



Merci Skanzo
Cool ca, finis mes 20 lignes de :
SendMessageToPC(GetFirstPC(), IntToString(nTruc));
maintenant plus qu'a afficher la fenetre

et encore une raison d'aimer la 1.30


Citation :
Donc voilà, je vous invite à réflechir la-dessus, trouver des trucs sympô, des utilisations pratiques, des templates de scripts ou même cracker le code source gniarf gniarf
boaf, la je crois pas que ca va nous avancer a ce niveau la
Aaahh ils ont enfin fait une copie de gdb pour NWN (euh, ok,c'est une pale copie, un peu insubstancielle même), ça c'est génial !! C'est excellent pour débugguer de gros script bien lourd !!!!!!!
Bon, maintenant ils nous rajoutent un bon préprocesseur (ou à la limite un compilateur qui optimise correctement les constantes nouvellement apparue en 1.30) et nous aurons un vrai outil de scripting entre les mains avec le débogueur et le compilateur en ligne de commande.
Dans le dossier /utils, le debugger laisse un log de tous les debugs effectués.
Dans ce style là:
Code PHP:

------------------------------
01/07/2003 18:26:14
Message Type    
G
Message Window  
1
Message Command 
L
Component 0 
3
Component 1 
object oPC GetLastUsedBy();
------------------------------
01/07/2003 18:26:14
Message Type    
G
Message Window  
1
Message Command 
L
Component 0 
4
Component 1 
SendMessageToPCoPC"OK");
------------------------------
01/07/2003 18:26:14
Message Type    
G
Message Window  
1
Message Command 
L
Component 0 
5
Component 1 
AssignCommandoPCPlayAnimationANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD)); 
Citation :
Tout ça me fait penser qu'il devrait y avoir un moyen d'aller voir l'exécution d'une fonction ailleurs que dans le même script.
Ben vi, en plus c'est possible


J'ai essayé le script du début mais avec include comme ceci:
Code PHP:

#include "inc"

void main() {
    
SpawnScriptDebugger();
    
object oPC GetLastUsedBy();
    
int nVar Random1000);
    
AinsiFontFontoPCnVar);
    } 
AinsiFontFont se trouvant dans le script "inc".

Et en cliquant sur "Entrer", je vais bien voir l'execution de la fonction directement dans la biblio


Auparavant, je pensais que c'était pô possible tout simplement parce que j'essayais avec une fonction se trouvant dans un AssignCommand.

C'est donc possible de faire "Entrer" sur une fonction mais à condition que celle çi ne soit pô dans un AssignCommand, peu importe où elle se trouve (biblio ou script même).

Voilà
Oui effectivement, quand on fait "entrer", on voit le détail de la fonction ligne-à-ligne, alors que "passer" exécute la ligne du programme d'origine sans aller voir plus loin.

Bon, personnellement j'aurais bien aimé une fonction "avance rapide" mais y'a peut-être moyen d'y arriver avec "Goto break"

Ah, dernière chose qui va pas plaire à Jedaï, y'a un ptit bug avec les structures : dans l'affichage des variables en bas du débuggeur, les structures sont représentées sous la forme d'arborescence qui devraient pouvoir être rétractées, or on ne peut pas les fermer en double-cliquant dessus Oui, c'est gênant, quand y'a 5 vecteurs dans un script
question
Citation :
C'est réellement une éxecution pas à pas du script.
Y'a pas moyen de mettre des points d'arrêts ou des conditions d'arrêt ?
Sur de long script ou des boucles ça peux se révéler fastidieux de faire du pas à pas :baille:
C'est marrant de voir le GetFacing d'un objet plaçable orienté à la main, c'est jamais pile poil la valeur mais bon ça je m'en doutais quand même un peu, passons

Pour le break je sais pô trop d'autant plus qu'un break ne se met pô n'importe où

Je vais essayé avec mon système de calendrier voir comment le debugger réagit avec les breaks.
Hummmm mouais, bon ben là j'ai pô tout compris

J'ai essayé avec un script composé partiellement de switch, case et break. C'est un truc banal pour définir une variable string suivant le mois du calendrier, du genre pour 0 je vais mettre "Janvier", 1 "Fevrier", etc.

Le script s'enchaine bien jusqu'à ce que j'arrive au switch. Suivant la valeur, il va bien à la bonne ligne mais par contre pô moyen d'aller plus loin, et deux secondes plus tard, nwserver plante lamentablement

Pourtant mon code fonctionne... C'est pô encore au point le debugger
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés