[WIN32] EASY DEBUG

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 17 juin 2005 à 17:24
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008 - 21 sept. 2005 à 18:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32138-win32-easy-debug

MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
21 sept. 2005 à 18:38
ouais mais mieux vaut le préciser, tout ça devrait etre concentrer en une bible, je vais y travailler en meme tps que recuperer tout les types de messages windows, les api usuelles, les prototype des callbacks, en gros tout ce qui peux nous faire developper plus vite !!
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
21 août 2005 à 12:42
Sans blagues Wina!? On s'en serait douté, tout cela est très logique
cs_wina Messages postés 2 Date d'inscription samedi 20 août 2005 Statut Membre Dernière intervention 21 août 2005
21 août 2005 à 12:36
On gagne forcement en vitesse avec les inlines.
Raison;
En principe les fonctions en ligne(inline) ne provoquent aucun debranchement du microprocesseur vers la zone memoire geree par l'instance du debuggeur.
On gagne donc en vitesse a coup sur !
But :
Il s'agit d'optimiser la vitesse d'execution des sous programmes en developpant directement le code a l'endroit ou est appelee la fonction.
At-t-tention :
L'usage execssif de fonctions en ligne provoque une augmenetation rapide des ressources memoire et de la taille de l'instance(dump) portable excutable, c'est a dire l'exe final lui meme.
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
19 juin 2005 à 20:33
On utilise géénralement les MessageBox quand on ne peut pas être en mode Debug (mode Release, PDA etc...).
Je pense qu'il est plus qu'indispensable d'utiliser OutputDebugString en mode Debug, ne serait-ce que pour travailler plus vite.

Au niveau du code, j'aurai centralisé les appels à une fonction qui s'occupe du MessageBox.

Sinon il y a des new inutiles mais ça a déjà été dis plus haut ^^

Ca reste une initiative pas trop mal ^^.
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
17 juin 2005 à 22:25
lol je voulais dire l'inverse ..., je dois vraiment avoir la tete dans le ***
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 juin 2005 à 19:53
Oui, on gagne donc en vitesse, revoit ton raisonnement :)
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
17 juin 2005 à 19:51
Donc on gagne en taille mais pas en vitesse c'est ça ? car le inline met le code dans le programme alors qu'une non inline doit etre appellée donc perte de tps ?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 juin 2005 à 19:36
OK sauf ces 3 là: lstrcpy(), lstrcat() et lstrcmpi().
Le compilo met inline le code asm des funcs C (donc macro) sinon tu fais des appels de func vers kernel32.
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
17 juin 2005 à 19:27
Tres interressant ça ! Je vais me pencher dessus. C'est vraiment sympa des gens comme vous ...
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
17 juin 2005 à 19:14
Petit conseil: quand vous travaillez en Win32, il est préferable d'oublier la librairie C standard, il suffit juste d'utiliser les equivalents Win32, cela fera gagner pas mal de place à votre programme. Voici les equivalents des quelques fonctions basique du C:

sprintf() => wsprintf()
strcpy => lstrcpy()
strcat() => lstrcat()
strcmp() => lstrcmpi()
malloc() => HeapAlloc()
realloc()=> HeapReAlloc()
free() => HeapFree()
fopen() => CreateFile()
fread() => ReadFile()
fwrite() => WriteFile()
etc...
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
17 juin 2005 à 18:35
VIVE LES NULS !
ensuite vechio : "Je vous vois venir avec vos : Pourquoi t'a mis strcat au lieu de sprintf ?
Réponse simple, moins il y a de librairie mieux c'est, donc, comme strlen m'étais indispensable, ben j'ai utilisé les commandes de string.h comme ça ya pas de stdio.h ;-)" Ceci est un extrait de Explication finale (lol ça fais un peu le destin fataliste).

Brunews, c'étais ma premiere version (qui a duré 20 sec, mais qui a existée quand meme), mais si on veux debugger beaucoup de variable ben on est obligé de dire de quelle variable on parle si tu vois ce que je veux dire. Je trouve que c'est bien plus net que d'aller se dire merde, dans qu'elle ordre va le prog etc ...

Quand a mon erreur de delete (je suis vraiment trop con, je dois etre un peu au paradis des petits connards de service :D a cause de la chaleur (31 pres de perpignan)) je vais la corriger tout de suite.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 juin 2005 à 18:20
BruNews apprécie surement ces trois lignes:

Message = new char[strlen(Objet) + 3 + 5 + 1];
strcpy(Message,Objet);
strcat(Message," = false");

C'est le genre de code qu'il écrivait avant que je ne le prenne en main
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 juin 2005 à 18:15
ou "Fuite mémoire"...

Plus sérieux:
void Debug(bool Boolean)
{
char* Message;
if(Boolean == true){
Message new char[7 + 4 + 1]; // len("Etat = ") + len("true") + le \0
strcpy(Message,"Etat = true");
}
else{
Message new char[7 + 5 + 1]; // len("Etat = ") + len("false") + le \0
strcpy(Message,"Etat = false");
}
MessageBox(NULL,Message,"Easy Debug",MB_OK);
}

En plus court:
void Debug(bool Boolean)
{
MessageBox(NULL, Boolean ? "Etat true": "Etat false","Easy Debug",MB_OK);
}

je sais que les 'new' sont à la mode mais vraiment inutiles ici, dans tous les cas les chaines que tu copies existent déjà dans ton registre data.
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
17 juin 2005 à 18:12
Vecchio tu fais dans la blague maintenant mdr ? :D
Et c'est pas plutot Mickey le maitre de plutot ?
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 juin 2005 à 17:24
Pardon tu ne t'appelles pas plutot mais MuPuF
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 juin 2005 à 17:24
Je trouve qu'il a beaucoup de new[] par rapport aux delete[], c'est pas très bon signe ca!
T'a pas pensé a utiliser sprintf plutot? Ca ne ferait qu'une fonction
Rejoignez-nous