begin process at 2012 02 10 07:49:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > LA CLASSE DEBUG STREAM

LA CLASSE DEBUG STREAM


 Information sur la source

Note :
Aucune note
Catégorie :API Classé sous :debug, console, outputdebugstring Niveau :Initié Date de création :10/04/2007 Vu / téléchargé :4 459 / 69

Auteur : adeldz

Ecrire un message privé
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

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


 Sources de la même categorie

Source avec Zip WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SHOP MANAGER CONSOLE SUR WINDOWS par antho974
Source avec Zip CARNET D'ADRESSE MODE CONSOLE par chikusa
Source avec Zip SNAKE CONSOLE par fboivin63
Source avec Zip Source avec une capture SNAKE CONSOLE par Maxou1012
Source avec Zip OUTPUTDEBUGSTRINGEX par kts_system

Commentaires et avis

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.

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 3,822 sec (3)

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