Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LA CLASSE DEBUG STREAM


Information sur la source

Catégorie :API Classé sous : debug, console, outputdebugstring Niveau : Initié Date de création : 10/04/2007 Vu / téléchargé: 3 643 / 60

Note :
Aucune note

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Une classe assez simple, semblable au flux stl, qui redirige ses sorties vers une fentre console. Il s'agit d'un simple "Wrapper" autour de la fonction win32 ::OutputDebugString.
 

Source

  • // Interface de la classe
  • #ifndef BKDBG_DEBUGSTREAM_H
  • # define BKDBG_DEBUGSTREAM_H
  • /*******************************************************************************
  • This is a part of the BKLib library.
  • Copyright (c) Adel_dz
  • All rights reserved.
  • Adel_dz@hotmail.fr
  • Class Ver 1R3
  • Output debug messages using ::OutputDebugString.
  • The msg is also written to a console.
  • SPEC:
  • - TyDebugStream flush the output string when:
  • . Object is destructed
  • . The buffer is full
  • . Calling Flush()
  • ********************************************************************************/
  • #ifndef BKDBG_DEFS_H
  • # include "Defs.h"
  • #endif
  • namespace bklib
  • {
  • class BKDBG_decl TyDebugStream
  • {
  • public:
  • TyDebugStream() throw();
  • ~TyDebugStream() throw();
  • void Flush() throw();
  • TyDebugStream& operator << (const void* Ptr) throw();
  • TyDebugStream& operator << (const char* CString) throw();
  • TyDebugStream& operator << (const wchar_t* WCString) throw();
  • TyDebugStream& operator << (bool b) throw(); //Print true/false.
  • TyDebugStream& operator << (char Char) throw();
  • TyDebugStream& operator << (wchar_t Char) throw();
  • TyDebugStream& operator << (signed char Integer) throw();
  • TyDebugStream& operator << (unsigned char Integer) throw();
  • TyDebugStream& operator << (short Integer) throw();
  • TyDebugStream& operator << (unsigned short Integer) throw();
  • TyDebugStream& operator << (int Integer) throw();
  • TyDebugStream& operator << (unsigned Integer) throw();
  • TyDebugStream& operator << (long Integer) throw();
  • TyDebugStream& operator << (unsigned long Integer) throw();
  • TyDebugStream& operator << (__int64 Integer) throw();
  • TyDebugStream& operator << (unsigned __int64 Integer) throw();
  • TyDebugStream& operator << (float Real) throw();
  • TyDebugStream& operator << (const double& Real) throw();
  • TyDebugStream& operator << (const long double& Real) throw();
  • protected:
  • private:
  • enum
  • {
  • buffer_len = 256
  • };
  • char dbg_buffer[buffer_len];
  • void CopyString(const wchar_t* String) throw();
  • void CopyString(const char* String) throw();
  • void WriteText(const char* Text) throw();
  • static BOOL WINAPI ConsoleHandler(unsigned CtrlType);
  • };
  • //**********************************************************************************
  • }//namespace
  • #endif
// Interface de la classe

#ifndef BKDBG_DEBUGSTREAM_H
#  define BKDBG_DEBUGSTREAM_H



/*******************************************************************************

This is a part of the BKLib library.
Copyright (c) Adel_dz
All rights reserved.
Adel_dz@hotmail.fr

Class Ver 1R3

Output debug messages using ::OutputDebugString.
The msg is also written to a console.

SPEC:
	- TyDebugStream flush the output string when:
		. Object is  destructed
		. The buffer is full
		. Calling Flush()

********************************************************************************/


#ifndef BKDBG_DEFS_H
#  include "Defs.h"
#endif


namespace bklib
{

class BKDBG_decl TyDebugStream
{
   public:
      TyDebugStream() throw();
      ~TyDebugStream() throw();

      void Flush() throw();

      TyDebugStream& operator << (const void* Ptr) throw();
      TyDebugStream& operator << (const char* CString) throw();
      TyDebugStream& operator << (const wchar_t* WCString) throw();
      TyDebugStream& operator << (bool b) throw();	//Print true/false.
      TyDebugStream& operator << (char Char) throw();
      TyDebugStream& operator << (wchar_t Char) throw();
      TyDebugStream& operator << (signed char Integer) throw();
      TyDebugStream& operator << (unsigned char Integer) throw();
      TyDebugStream& operator << (short Integer) throw();
      TyDebugStream& operator << (unsigned short Integer) throw();
      TyDebugStream& operator << (int Integer) throw();
      TyDebugStream& operator << (unsigned Integer) throw();
      TyDebugStream& operator << (long Integer) throw();
      TyDebugStream& operator << (unsigned long Integer) throw();
      TyDebugStream& operator << (__int64 Integer) throw();
      TyDebugStream& operator << (unsigned __int64 Integer) throw();
      TyDebugStream& operator << (float Real) throw();
      TyDebugStream& operator << (const double& Real) throw();
      TyDebugStream& operator << (const long double& Real) throw();

   protected:
   private:
		enum
		{
			buffer_len = 256
		};

      char dbg_buffer[buffer_len];

      void CopyString(const wchar_t* String) throw();
      void CopyString(const char* String) throw();
      void WriteText(const char* Text) throw();

      static BOOL WINAPI ConsoleHandler(unsigned CtrlType);
};
//**********************************************************************************


}//namespace

#endif

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Mr.X le 13/04/2007 18:52:55

euh plutôt que d'utiliser tout un tas de surchargement d'opérateur, utilisé les templates n'aurait pas été une meilleur idée ?
Sinon il y a un protected qui ne sert à rien et si je ne mabuse un enum pour une seul variable c'est sans grand intérêt ...
Et puis mettre un namespace c'est pas super utile pour le coup je trouve, c'est plus contraignant qu'autre chose.
Une dernière chose, pourquoi tu fait un try{}catch(...){} mais tu ne fait rien sur l'erreur ? Je vois pas l'intéré, d'autant plus que si l'exception n'est pas relancé personne ne pourrat savoir de quel genre d'erreur il s'agit.

signaler à un administrateur
Commentaire de adeldz le 14/04/2007 10:31:42

Bonjour, je vais donner certaines explications a propos des points que Mr.X a pose.

1. Pour ce qui du enum, je pense que c'est une bonne habitude que de ne pas utilser des nombres maqique tel que 255 ou autre, puis cette constante est assez utilsee dans la definition des fonctions de la classe.

2. Si quelqu'un a consulte le fichier Defs.h, il aurait remarque que cette classe fait partie d'une bibliotheque, d'ou le namespace. Il s'agit de la premiere d'un serie de classes que je compte publier dans Code source. D'ailleur il faut toujour avoir la bonne habitude d'encapsuler sont code dans un namespace.

3. Pour ce qui est du try/catch; il ne faut pas oublier le but principal de cette  classe qui est le tracage durant le debuggage, il serait mal saint qu'une classe de ce genre puissent "lancer" une exception. Donc autant eliminer tout exceptions pour garder la semantique de la classe correcte. Si une exception s'echappe de l'une des fonctions de cette classe, le code client devra etre en mesure de la gerer, seulement le code utilsant notre classe de tracage n'est pas defini durant le mode "release". Donc meme la semantique du code client sera differente entre deux mode de compilation (Debug, Release).

3. Pour utilser les templates, la classe TyDebugStream devra etre derivee des flux stl (std::ostream) et redefenir un certain nombre de fonctions. Il s'agit de garder les choses simples, j'utilse la fonctions Win32 ::StringCchPrintf. Il impossible d'utilser les templates dans ce cas puisque cette fonction prend le type des ces arguments a la maniere de la printf.

Je termine par un grand remerciement a Mr.X pour l'interet qu'il a porte a cette miniscule classe. merci beacoup.
a+

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Probleme de preprocesseur [ par alphaone ] Bonjour, j'ai un fichier d'en tête .h inclut partout ou il y as:#ifndef INCLUDE_ENV_H#define INCLUDE_ENV_H//debug level, 0: no debug, 10 critical and gerer une situation console [ par senema ] salue à tous je suis débutante et j'ai un projet à rendre en fin de semestre portant sur la gestion d'une mémoire vidéo.Le problème c'est que je ne sa [C]Titre lecture musique en cours [ par BastienL21 ] Bonjour à tous,Développant une application en C en Console, je voudrais pouvoir récupérer le titre de la musique que le player (Windows media, Winamp, [C]désactiver la Croix de fermeture (console) [ par BastienL21 ] Bonjour à tous,    Je développe actuellement une application console en C et je souhaiterais désactiver la croix [X] en haut à droite de fermeture de Probleme console avec Eclipse [ par TeChn4K ] Bonjour ! Je viens vers vous car j'ai un petit soucis d'affichage console avec eclipse ! Je m'explique : Une methode me permet d'afficher les attribut musique grésille Console [ par BastienL21 ] Bonjour à tous,    Je programme actuellement une console qui fait un peu tout...bref en gros il contient une boucle while( !kbhit()) où se trouve deda déclancher un événement à la fin d'une application console [ par youri01 ] salut, je suis en train de faire une application de type console et là je bloque.l'application ne se termine pas et j'aimerai déclencher un évènement [C] Image de fond en console [ par BastienL21 ] Bonjour à tous,    J'ai une question que je me pose depuis un certains temps et je vous la pose. Je sais qu'on peu le faire sous Linux (mais pas comme comment faire un #if "debug/release mode" [ par nord666 ] Salut à tous et à toutes,Je me demande si c'est possible de pouvoir faire quelque chose du genre(j'utilise visual studio 8.0):#if (le mode dans lequel probleme de debug sous vs 2008 [ par michel_arnaud ] bonjourj'ai régulièrement l'erreur suivante que je réparres en modifiant mon code mais bon pas terrible.An unhandled non-continuable STATUS_DLL_NOT_FO


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.