begin process at 2012 02 09 15:59:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > [WIN32] EASY DEBUG

[WIN32] EASY DEBUG


 Information sur la source

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Classé sous :debug, debugage Niveau :Débutant Date de création :17/06/2005 Date de mise à jour :23/02/2006 10:32:11 Vu / téléchargé :5 456 / 99

Auteur : MuPuF

Ecrire un message privé
Site perso
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

Bon, ce code est assez leger, mais bon, il sert.
Je l'ais écris car j'en avais marre de devoir taper a chaque fois MessageBox(etc...) pour chaque string, ou alors 5/6 lignes pour un etat booleen.
Donc il suffit d'inclure un .cpp et on utilise une commande Debug qui supporte les char*, les int et les bool, libre a vous de le completer, je me ferai une joie de le rajouter dans ce cpp.

Bien sur ce code est peu commente, vous comprenez pourquoi ;-), et il ne sert a rien pour les applications console car un simple printf suffit.

Source

  • //DebugFacile.cpp
  • #include "stdafx.h"
  • #include <stdlib.h>
  • void Debug(char* Message)
  • {
  • MessageBox(NULL,Message,"Easy Debug",MB_OK);
  • }
  • void Debug(int Nombre)
  • {
  • char* Message;
  • Message = new char[6];
  • itoa(Nombre,Message,10);
  • MessageBox(NULL,Message,"Easy Debug",MB_OK);
  • delete[] Message;
  • }
  • 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);
  • delete[] Message;
  • }
  • void Debug(char* Objet,char* String)
  • {
  • char* Message;
  • Message = new char[strlen(Objet) + 3 + strlen(String) + 1];
  • strcpy(Message, Objet);
  • strcat(Message," = \"");
  • strcat(Message,String);
  • strcat(Message,"\".");
  • MessageBox(NULL,Message,"Easy Debug",MB_OK);
  • delete[] Message;
  • }
  • void Debug(char* Objet,int Nombre)
  • {
  • char* Message;
  • char* temp;
  • temp = new char[6];
  • itoa(Nombre,temp,10); //Transforme un nombre en un char*
  • Message = new char[strlen(Objet) + 3 + strlen(temp)+1]; // = len(Objet) + len (" = ") + len(temp) + le \0
  • strcpy(Message,Objet);
  • strcat(Message," = ");
  • strcat(Message,temp);
  • MessageBox(NULL,Message,"Easy Debug",MB_OK);
  • delete[] Message;
  • delete[] temp;
  • }
  • void Debug(char* Objet,bool Etat)
  • {
  • char* Message;
  • if(Etat == true){
  • Message = new char[strlen(Objet) + 3 + 4 + 1]; // = len(Objet) + len (" = ") + len("true") + le \0
  • strcpy(Message,Objet);
  • strcat(Message," = true");
  • }
  • else{
  • Message = new char[strlen(Objet) + 3 + 5 + 1]; // = len(Objet) + len (" = ") + len("false") + le \0
  • strcpy(Message,Objet);
  • strcat(Message," = false");
  • }
  • MessageBox(NULL,Message,"Easy Debug",MB_OK);
  • delete[] Message;
  • }
//DebugFacile.cpp

#include "stdafx.h"
#include <stdlib.h>

void Debug(char* Message)
{
	MessageBox(NULL,Message,"Easy Debug",MB_OK);
}

void Debug(int Nombre)
{
	char* Message;
	Message = new char[6];
	itoa(Nombre,Message,10);
	MessageBox(NULL,Message,"Easy Debug",MB_OK);
	delete[] Message;
}

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);
	delete[] Message;
}

void Debug(char* Objet,char* String)
{
	char* Message;
	
	Message = new char[strlen(Objet) + 3 + strlen(String) + 1];
	strcpy(Message, Objet);
	strcat(Message," = \"");
	strcat(Message,String);
	strcat(Message,"\".");

	MessageBox(NULL,Message,"Easy Debug",MB_OK);
	delete[] Message;
}

void Debug(char* Objet,int Nombre)
{
	char* Message;
	char* temp;
	
	temp = new char[6];
	itoa(Nombre,temp,10); //Transforme un nombre en un char*
	
	Message = new char[strlen(Objet) + 3 + strlen(temp)+1]; // = len(Objet) + len (" = ") + len(temp) + le \0
	strcpy(Message,Objet);
	strcat(Message," = ");
	strcat(Message,temp);
	
	MessageBox(NULL,Message,"Easy Debug",MB_OK);
	
	delete[] Message;
	delete[] temp;
}

void Debug(char* Objet,bool Etat)
{
	char* Message;
	
	if(Etat == true){
		Message = new char[strlen(Objet) + 3 + 4 + 1]; // = len(Objet) + len (" = ") + len("true") + le \0
		strcpy(Message,Objet);
		strcat(Message," = true");
	}
	else{
		Message = new char[strlen(Objet) + 3 + 5 + 1]; // = len(Objet) + len (" = ") + len("false") + le \0
		strcpy(Message,Objet);
		strcat(Message," = false");
	}

	MessageBox(NULL,Message,"Easy Debug",MB_OK);

	delete[] Message;
}

 Conclusion

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 ;-). Et de 2, la vitesse n'a içi aucun interet car MessageBox bloque le processus.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

17 juin 2005 17:14:13 :
Séparation du code pour un main.cpp et un DebugFacile.cpp
17 juin 2005 18:38:48 :
Rajout de quelque delete oublié malencontreusement (j'ai pas d'escuse dsl lol). @ chao bonsoir !
23 février 2006 10:32:12 :
Un peu long, mais j'ai rajouté les delete[] et un zip pour qu'il puisse etre facilement utilisable.

 Sources du même auteur

Source avec Zip Source avec une capture [IRRLICHT][VC++ 2003] PROJET DARWIN : VOYAGEUR DE COMMERCE A...
Source avec Zip Source avec une capture [WIN32][VC++6] FILESENDER
Source avec Zip Source avec une capture [VC6] [TPE] SIMULATION WIN32 D'UN SYSTEME D'ALARME FAIT POUR...
Source avec Zip Source avec une capture TRONQUEUR DE NOM DE FICHIER (POUR LES BALADEURS) [VC++ 6]

 Sources de la même categorie

Source avec Zip SCHEDULER RR FIFO par yvesB87
Source avec Zip ALGORITHMES RÉCURSIFS VS ALGORITHMES ITÉRATIFS par yvesB87
Source avec Zip Source avec une capture C++ FORMAT D'IMAGE AVEC QT par pop70
Source avec une capture EXEMPLE DE POINTEURS DE FONCTION par pop70
Source avec Zip Source avec une capture [C++] CLASS REGISTER par Miwik

 Sources en rapport avec celle ci

Source avec une capture STACK WATCHER par lilxam7
Source avec Zip LIBRAIRIE POUR ÉVITER LES FUITES MEMOIRES par glipper
Source avec Zip OUTPUTDEBUGSTRINGEX par kts_system
Source avec Zip LA CLASSE DEBUG STREAM par adeldz
DUMP par poulpixx

Commentaires et avis

Commentaire de vecchio56 le 17/06/2005 17:24:31 administrateur CS

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

Commentaire de vecchio56 le 17/06/2005 17:24:52 administrateur CS

Pardon tu ne t'appelles pas plutot mais MuPuF

Commentaire de Joky le 17/06/2005 18:12:16

Vecchio tu fais dans la blague maintenant mdr ? :D
Et c'est pas plutot Mickey le maitre de plutot ?

Commentaire de BruNews le 17/06/2005 18:15:24 administrateur CS

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.

Commentaire de vecchio56 le 17/06/2005 18:20:02 administrateur CS

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

Commentaire de MuPuF le 17/06/2005 18:35:56

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.

Commentaire de Hades53 le 17/06/2005 19:14:05

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

Commentaire de MuPuF le 17/06/2005 19:27:38

Tres interressant ça ! Je vais me pencher dessus. C'est vraiment sympa des gens comme vous ...

Commentaire de BruNews le 17/06/2005 19:36:41 administrateur CS

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.

Commentaire de MuPuF le 17/06/2005 19:51:44

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 ?

Commentaire de vecchio56 le 17/06/2005 19:53:25 administrateur CS

Oui, on gagne donc en vitesse, revoit ton raisonnement :)

Commentaire de MuPuF le 17/06/2005 22:25:30

lol je voulais dire l'inverse ..., je dois vraiment avoir la tete dans le ***

Commentaire de poppyto le 19/06/2005 20:33:25 administrateur CS

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

Commentaire de wina le 21/08/2005 12:36:54

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.

Commentaire de vecchio56 le 21/08/2005 12:42:41 administrateur CS

Sans blagues Wina!? On s'en serait douté, tout cela est très logique

Commentaire de MuPuF le 21/09/2005 18:38:08

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

VC++ et access [ par tafiscobar ] voila, je fais un petit programme qui prend des valeurs ds un base de données pour les inscrire ds un fichier , voici ce q j'ai fait pour ouvrir la ba VC++ et access [ par tafiscobar ] voila, je fais un petit programme qui prend des valeurs ds un base de données pour les inscrire ds un fichier , voici ce q j'ai fait pour ouvrir la ba Prob grave avec Visual... [ par Nuage ] Voila, j'ai un grave problème avec le debug de Visual. Je fait un bête code source, avec une fonction pour créer un élement d'une pile, et une fonctio si quelqu'un ne m'aide pas, je vais peter un plomb [ par sebos2013 ] Salut a tous,a chaque fois que j'essai de creer le .exe de mon prog, les erreurs suivantes apparaissent:Deleting intermediate files and output files f pb avec ADO [ par Frederyck ] Voilà g un pb, j'utilise dans mon appli une bdd Access 97 via ADO et donc g inclut la commande:#import "C:\Program Files\Fichiers communs\System\ado\m debug vs release [ par coockiesch ] Hello!J'aimerais savoir les différences entre la compilation release et la compilation debug...Quels sont leurs avantages et leurs inconvéniants.Merci Debugage assembleur [ par crocejf2000 ] Salut,Qq'un pourrai il peut etre m'aider, j'ai une méchante érreur et jmy connais pas trop en assembleur, Borland c++ 5 me renvoi ceci : Il s'arrete a Problème de compilation [ par lbs ] Bonsoir,J'ai téléchargé les sources d'eMule (version officielle et version lsd). Je compile le tout et ca me met le message d'erreur suivant :------ D debug avec visual c++ [ par sk8reno ] bonjour, je voudrais savoir comment debuguer avec visual c++. il me met un message d'erreur "devenv.exe introuvable" . merci d'avancereno Debug & Release [ par hilairenicolas ] Bonjour à tous,j'ai un probleme étrange. Je developpe un .ocx qui n'a pas le meme comportement quand je le compile en mode debug ou en mode release. E


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,399 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales