Trucs et astuces pour Visual C++ 6 [C++] - C++ - Programmation
Marsh Posté le 03-07-2002 à 04:29:42
-Nouvelle version.
-Fichier téléchargeable.
Ça ne déchaîne pas les passions... peut-être que peu d'entre-vous utlisent VC++ 6 ?
Pour ma part, je commence à comprendre les problèmes qu'ils pose.
Marsh Posté le 03-07-2002 à 08:57:05
tu devrais poster l'adresse de ton topic dans le bibliolink c++, histoire que tout le monde puisse le retrouver facilement, si besoin.
Marsh Posté le 03-07-2002 à 13:46:36
si quelqu'un connait autant de trucs et astuces pour delphi ça m'intéresse!!
Marsh Posté le 03-07-2002 à 23:50:05
prettysmile: Je conaissait pas, merci.
L'éternelle quête de la bonne info parmi le brouaha généralisé continue!
Marsh Posté le 04-07-2002 à 00:51:26
musaran tres bonne initiativ mais bon l'environnement VC++ ne fait pas le poid face a un emacs
(surtout le mien avec la puissance jacky inside )
que je le regrete celui la quand je suis sous visual
mais bon tes petit astuce me font retrouver 2/3 bonne choses de emacs et me serront bien utiles
Marsh Posté le 04-07-2002 à 12:22:04
Je ne sais pas si tu la mis, mais la combinaison ctrl+shift+F9 permet d'enlever tous les breakpoints en un coup, assez pratique.
Marsh Posté le 04-07-2002 à 23:03:59
Voila mon fichier de macros VC. Mais bientot je pourrais le mettre a la poubelle car je suis en train d'ecrire un systeme d'extension en python a VC :-)
Sub SomeLineUp()
'DESCRIPTION: Move some lines up
on error resume next
ActiveDocument.Selection.LineUp dsMove,5
End Sub
Sub SomeLineDown()
'DESCRIPTION: Move some lines down
on error resume next
ActiveDocument.Selection.LineDown dsMove, 5
End Sub
Sub CleanBuild()
'DESCRIPTION: Enleve tous les fichiers intermediaires puis build le projet
Clean ActiveConfiguration
Build
End Sub
Sub VireInutile()
'DESCRIPTION: Enleve les espaces en fin de ligne
'Par le pouvoir de la Reg-Exp !!! Je reclame le Replace tout puissant !!!
curr_ligne = ActiveDocument.Selection.CurrentLine
curr_col = ActiveDocument.Selection.CurrentColumn
ActiveDocument.Selection.SelectAll
ActiveDocument.Selection.ReplaceText "\:b*$", "", dsMatchRegExp
ActiveDocument.Selection.MoveTo curr_ligne, curr_col
End Sub
Sub OemToANSI()
'DESCRIPTION: Convertit un texte OEM en ANSI
curr_ligne = ActiveDocument.Selection.CurrentLine
curr_col = ActiveDocument.Selection.CurrentColumn
ActiveDocument.Selection.SelectAll
ActiveDocument.Selection.ReplaceText chr(130), "é"
ActiveDocument.Selection.ReplaceText chr(138), "è"
ActiveDocument.Selection.ReplaceText chr(147), "ô"
ActiveDocument.Selection.ReplaceText chr(136), "ê"
ActiveDocument.Selection.ReplaceText chr(133), "à"
ActiveDocument.Selection.ReplaceText chr(131), "â"
ActiveDocument.Selection.ReplaceText chr(248), "°"
ActiveDocument.Selection.ReplaceText chr(196), "-"
ActiveDocument.Selection.MoveTo curr_ligne, curr_col
End Sub
Dim clipboard(64)
Dim cliplines
cliplines=-1
clipboard(0) = ""
Sub StackClipboardCut()
'DESCRIPTION: Performs a cut of current selection into LIFO stack
if(cliplines<63) then
cliplines=cliplines+1
clipboard(cliplines)=ActiveDocument.Selection.Text
ActiveDocument.Selection.Text=""
end if
End Sub
Sub StackClipboardCopy()
'DESCRIPTION: Performs a copy of current selection into LIFO stack
if(cliplines<63) then
cliplines=cliplines+1
clipboard(cliplines)=ActiveDocument.Selection.Text
end if
End Sub
Sub StackClipboardPaste()
'DESCRIPTION: Performs a paste of top LIFO stack entry into current selection
if(cliplines>-1) then
ActiveDocument.Selection=clipboard(cliplines)
cliplines=cliplines-1
else
ActiveDocument.Selection=clipboard(0)
end if
End Sub
Sub InverseAffect()
'DESCRIPTION: Inverse les membres gauche et droite d'affectation ( selectionner les affectations )
ActiveDocument.Selection.ReplaceText _
"\([^ ]*\)\:b*=\:b*\([^ ;]*\)", "\2 = \1", dsMatchRegExp
'"\(\:i\)\:b*=\:b*\(\:i\)", "\2 = \1", dsMatchRegExp _
End Sub
Sub InsereLigne()
'DESCRIPTION: Insere au debut de chaque ligne de la selection un texte
if ActiveDocument.Selection.TopLine = ActiveDocument.Selection.BottomLine then
exit sub
end if
curr_ligne = ActiveDocument.Selection.CurrentLine
curr_col = ActiveDocument.Selection.CurrentColumn
texte = inputbox("Quel texte voulez vous ajoutez au debut de chaque ligne de la selection ?", "Ajout d'un texte en debut de lignes" )
if Len(texte)=0 then
exit sub
end if
ActiveDocument.Selection.ReplaceText "^",texte, dsMatchRegExp
ActiveDocument.Selection.MoveTo curr_ligne, curr_col
End Sub
Sub CommenteBloc()
'DESCRIPTION: Commente une selection
curr_ligne = ActiveDocument.Selection.CurrentLine
curr_col = ActiveDocument.Selection.CurrentColumn
ActiveDocument.Selection.ReplaceText "^\:b*//\:b*","", dsMatchRegExp
ActiveDocument.Selection.ReplaceText "^","//", dsMatchRegExp
ActiveDocument.Selection.MoveTo curr_ligne, curr_col
End Sub
Sub LignesNumerotees()
'DESCRIPTION: Ecris une suite de lignes numerotees
curr_ligne = ActiveDocument.Selection.CurrentLine
curr_col = ActiveDocument.Selection.CurrentColumn
tmp = InputBox("Combien de lignes voulez-vous creer ?", "Entree de lignes" )
if Len(tmp)=0 then
exit sub
end if
cnt = InputBox("Combien de textes par ligne ? (au moins 1)", "Entree de lignes" )
if (cnt<1) then
Msgbox cnt + " n'est pas une valeur valide ! Reessayez !"
exit sub
end if
NbLignes = CInt(tmp)
texte = InputBox("Quel texte voulez-vous entrer ?", "Entree de lignes" )
ActiveDocument.Selection.MoveTo curr_ligne, curr_col
Ajout = ""
for Cpt1 = 0 to NbLignes
' ActiveDocument.Selection.Text = texte + CStr(Cpt1) + "," + chr(13)
if (Cpt1<10) then
autre = " "
else
autre = ""
end if
if ((Cpt1+1) mod Cnt) <> 0 then
Ajout = Ajout + texte + CStr(Cpt1) + ", " + autre
else
Ajout = Ajout + texte + CStr(Cpt1) + "," + autre + chr(13)
end if
next
ActiveDocument.Selection.Text = Ajout
ActiveDocument.Selection.MoveTo curr_ligne, curr_col
End Sub
Sub Indentator()
'DESCRIPTION: Indentator, il va tout vous indenter !!!
curr_ligne = ActiveDocument.Selection.CurrentLine
curr_col = ActiveDocument.Selection.CurrentColumn
if (ActiveDocument.Selection.BottomLine=ActiveDocument.Selection.TopLine) then
ActiveDocument.Selection.SelectAll
end if
premier = ActiveDocument.Selection.TopLine
max_ligne = ActiveDocument.Selection.BottomLine
Application.visible = false
ActiveDocument.Selection.MoveTo 0,0
for Cpt1=premier to max_ligne
ActiveDocument.Selection.MoveTo Cpt1, 1
ActiveDocument.Selection.SmartFormat
ActiveDocument.Selection.LineDown
next
Application.visible = true
ActiveDocument.Selection.MoveTo curr_ligne, curr_col
End Sub
' This will assisgn resource ID's to the selected block by starting
' with the resource ID given and then incrementing until the end of
' the selection is reaced.
' (Uncomment the commented lines to process only sourcecode files)
Sub AssignResourceIDToSelection()
msg = InputBox ("Enter The resource ID to start From:" )
' TypeOfFile = FileType(ActiveDocument)
' if TypeOfFile <> dsCPP Then
' MsgBox "File Must be of type .c, .cpp, .cxx, .h, .hpp, .hxx"
' Else
If msg <> "" Then
If IsNumeric(msg) Then
nCurResourceID = Int(msg)
AssignGivenResourceIDToSelection(nCurResourceID)
End If
Else
MsgBox "You MUST enter a resource ID, Aborting"
End If
' End if
End Sub
'This function can be integrated with other macros to
'automate the renumbering of resource ID's
Function AssignGivenResourceIDToSelection (ByVal nCurResourceID)
nStartLine = ActiveDocument.Selection.TopLine
nEndLine = ActiveDocument.Selection.BottomLine
' Debugging messageBox
' MsgBox "Start:" + CStr(nStartLine) + " End:" + + CStr(nEndLine)
For i = nStartLine To nEndLine
ActiveDocument.Selection.GoToLine i
ActiveDocument.Selection.FindText "#define", dsMatchForward
If ActiveDocument.Selection.CurrentLine = i Then
' Debugging messageBox
' MsgBox "Ext:" + CStr(ActiveDocument.Selection.CurrentLine)
ActiveDocument.Selection.EndOfLine
ActiveDocument.Selection.WordLeft dsExtend
ActiveDocument.Selection = nCurResourceID
nCurResourceID = nCurResourceID + 1
End if
Next
End Function
Sub DocumentName()
'DESCRIPTION: Affiche le nom d'un document
msgbox Application.ActiveDocument.FullName
End Sub
Sub TrueFalse()
'DESCRIPTION: A description was not provided.
Application.visible = false
windows.CloseAll
Documents.Open ActiveProject.FullName, "Text"
ActiveDocument.Selection.MoveTo 1,1
line = 0
do while(ActiveDocument.Selection.FindText("SOURCE=.*\{\.h\!\.c\!\.cpp\}$", dsMatchRegExp)=true)
if (line>=ActiveDocument.Selection.CurrentLine) then
exit do
end if
TrueFalseFile(ActiveDocument.Selection.Text)
line = ActiveDocument.Selection.CurrentLine
Loop
ActiveDocument.Close
Application.visible = true
MsgBox "BOOL, TRUE et FALSE, mis a jour !"
End Sub
sub TrueFalseFile(filename)
filename = mid(filename, 8) ' vire SOURCE=
Documents.Open filename
ActiveDocument.Selection.SelectAll
ActiveDocument.Selection.ReplaceText "true", "TRUE", dsMatchWord
ActiveDocument.Selection.SelectAll
ActiveDocument.Selection.ReplaceText "false", "FALSE", dsMatchWord
ActiveDocument.Selection.SelectAll
ActiveDocument.Selection.ReplaceText "bool", "BOOL", dsMatchWord
ActiveDocument.Close
end sub
Sub MyNextLine()
'DESCRIPTION: A description was not provided.
ActiveDocument.Selection.SmartFormat
ActiveDocument.Selection.LineDown
End Sub
Sub MyPreviousLine()
'DESCRIPTION: A description was not provided.
ActiveDocument.Selection.SmartFormat
ActiveDocument.Selection.LineUp
End Sub
Sub OuvreSourcesDuProjet()
'DESCRIPTION: Ouvre tous les fichiers sources d'un projet
windows.CloseAll
Documents.Open ActiveProject.FullName, "Text"
set dsp = ActiveDocument
dsp.Selection.MoveTo 1,1
line = 0
do while(dsp.Selection.FindText("SOURCE=.*\{\.h\!\.c\!\.cpp\}$", dsMatchRegExp)=true)
if (line>=dsp.Selection.CurrentLine) then
exit do
end if
Documents.Open mid(dsp.Selection.Text, 8)
line = dsp.Selection.CurrentLine
Loop
dsp.close
End Sub
Sub superif()
'DESCRIPTION: Insere un "if"
ActiveDocument.Selection.Text = "if (){" + chr(13) + "}"
ActiveDocument.Selection.MoveTo ActiveDocument.Selection.CurrentLine-1, 1, dsExtend
ActiveDocument.Selection.SmartFormat
ActiveDocument.Selection.FindText "("
ActiveDocument.Selection.MoveTo ActiveDocument.Selection.CurrentLine, ActiveDocument.Selection.CurrentColumn
ActiveDocument.Selection.SmartFormat
End Sub
private function CompteLignesDeCodeInFile(filename)
length = 0
Documents.Open filename
ActiveDocument.Selection.SelectAll
length = ActiveDocument.Selection.BottomLine
ActiveDocument.Close
CompteLignesDeCodeInFile = length
end function
Sub EnterBug()
'DESCRIPTION: "Solve" the ENTER-bug !
ActiveDocument.Selection.Text = chr(13)
End Sub
Sub FabOneTimeInclude()
'DESCRIPTION: Include a header ONE time
On Error Resume Next
dim name
name = ActiveDocument.Name
if Right(name, 2) <> ".h" then
exit sub
end if
curr_ligne = ActiveDocument.Selection.CurrentLine
curr_col = ActiveDocument.Selection.CurrentColumn
ActiveDocument.Selection.StartOfDocument
dim Id
Id = "__" + UCase(Left(name, Len(name)-2)) + "_H__"
ActiveDocument.Selection.Text = "#ifndef " + Id + chr(13) _
+ "#define " + Id + chr(13) + chr(13)
ActiveDocument.Selection.EndOfDocument
ActiveDocument.Selection.Text = chr(13) + chr(13) + "#endif // " + Id
ActiveDocument.Selection.MoveTo curr_ligne + 3, curr_col
End Sub
Sub RemoveFalseTab()
'DESCRIPTION: A description was not provided.
curr_ligne = ActiveDocument.Selection.CurrentLine
curr_col = ActiveDocument.Selection.CurrentColumn-1
if curr_col=0 then exit sub
char_left = curr_col mod 4
if char_left=0 then char_left=4
PrintToOutputWindow char_left
ActiveDocument.Selection.MoveTo curr_ligne, curr_col-char_left+1, dsExtend
ActiveDocument.Selection.Text = RTrim(ActiveDocument.Selection.Text)
End Sub
Private sub DoMakeBuildDate()
ActiveProject.AddFile "buildate.h"
DoBeforeBuildStart()
end sub
sub MakeBuildDate()
On Error Resume Next
DoMakeBuildDate()
end sub
Private sub DoBeforeBuildStart()
Documents.Open "buildate.h"
ActiveDocument.Selection = "#define BUILD_DATE "
ActiveDocument.Save()
FabOneTimeInclude()
end sub
sub dummyApplication_BeforeBuildStart()
On Error Resume Next
DoBeforeBuildStart()
end sub
private Sub DoSelLen()
msgbox len(ActiveDocument.Selection), vbOKOnly+vbInformation, "Selection len"
end sub
Sub SelLen()
'DESCRIPTION: A description was not provided.
on error resume next
DoSelLen()
End Sub
start = 0
sub Application_BeforeBuildStart()
start = Now
end sub
sub Application_BuildFinish(nNumErrors, nNumWarnings)
t = DateDiff("s", start, Now)
sss = int(t mod 60)
mmm = int((t/60) mod 60)
hhh = int(t/3600)
res = "Build done in "
if hhh>0 then
res = res & cstr(hhh) & "h " & cstr(mmm) & "mn " & cstr(sss) & "s"
else
if mmm>0 then
res = res & cstr(mmm) & "mn " & cstr(sss) & "s"
else
res = res & cstr(sss) & "s"
end if
end if
PrintToOutputWindow res
end sub
Sub ToggleSource()
'DESCRIPTION: toggle between .h and .cpp
filename = None
if lcase(right(ActiveDocument.Name, 2))=".h" then
'on error resume next
filename = left(ActiveDocument.FullName, len(ActiveDocument.FullName)-2)+".cpp"
Documents.Open(filename)
elseif lcase(right(ActiveDocument.Name, 4))=".cpp" then
'on error resume next
filename = left(ActiveDocument.FullName, len(ActiveDocument.FullName)-4)+".h"
Documents.Open(filename)
end if
if filename<>None then
for each cpt in documents
if cpt.FullName=filename then
cpt.active = 1
exit for
end if
next
end if
End Sub
Marsh Posté le 05-07-2002 à 01:58:44
DJ_ThOnY: Je le rajouterai peut-être.
Pour connaître tous les autres raccourçis clavier, faire menu "Help/Keyboard Map".
Cliquez sur les titre pour trier.
fabsk:
On sent qu'il y a du travail derrière !
Encadre ton code avec la balise [fixed], ce sera plus lisible.
Marsh Posté le 04-06-2002 à 11:38:35
J'ai regroupé ici toutes ces petites choses si pratiques à savoir, mais pas forcément évidentes à trouver.
Excusez l'écriture parfois simpliste, j'ai essayé d'être concis pour garder le document court.
Contactez-moi pour toute erreur, remarque ou ajout.
Téléchargeable au format rtf zippé: http://musaran.free.fr/cpp/Trucs_VC6.zip
Quelques raccourcis:
souris
On peut glisser/déposer le texte sélectionné.
-Ctrl (maintenu) =copier au lieu de déplacer.
-Alt (maintenu) =sélection d'un rectangle de texte (reste un rectangle quand collé).
-Clic dans la marge=sélection de lignes.
-Double-clic =sélection de mot.
déplacement
-Home/End =aller en début/fin de texte de ligne (répéter Home pour aller en début de ligne, +Ctrl=début/fin de fichier).
-Ctrl+Gauche/Droite=aller de mot en mot.
-Ctrl+E =aller à l'accolade/parenthèse/crochet apparié.
-Ctrl+J/K =aller au #if #ifdef #ifndef #else #endif précédent/suivant.
-Ctrl+Shift+F8 =sélection d'un rectangle de texte au curseur.
+Shift =sélectionner en déplaçant le curseur avec n?importe laquelle des commandes précédentes.
navigation
-Ctrl+F3 =occurrence suivante du mot courant (+Shift=précédent).
-Ctrl+F2 =mettre/enlever un marque-page (+Shift=tout enlever).
-F2 =aller au marque-page suivant (+Shift=précédent).
-F4 ou double-clic =lignes mentionnées dans la fenêtre output (erreurs ou "Find in Files" ) (+Shift=précédent).
édition
-Ctrl+L =couper ligne(s).
-Ctrl+Shift+T =permute deux mots.
-Alt+Shift+T =permute deux lignes.
-Ins =permute les mode insertion/refrappe de texte.
-Alt+F8 =indente correctement la sélection.
-Tab =augmente l'indentation des lignes sélectionnées (+Shift=diminue).
-Ctrl+U =mettre en minuscules (+Shift=majuscules).
-Ctrl+Backspace =effacer le mot devant.
-Ctrl+Del =effacer le mot derrière.
renseignements
-F1 =aide sur le mot ou le n° d'erreur de compilation sous le curseur.
-F12 =trouver la définition du nom.
-Ctrl+* (pavé num) =revenir à la position d'origine.
-Alt+F12 =renseignements généraux sur le mot.
-Ctrl+Shift+Espace =affiche le prototype de la fonction (définie) en cours (Ctrl+PgUp/PgDown si plusieurs).
-Ctrl+T =information sur le type (normalement automatique).
-Ctrl+Espace =complétion automatique.
-Alt+Ctrl+T =lister membres (normalement automatique), ou tout si au niveau global.
compilation
-Alt+F10 =appliquer changement de code sans sortir du débogueur.
-Ctrl+F7 =compiler le source actuel seulement (fichier *.OBJ). C?est plus rapide.
autres
-Esc =masquer la fenêtre output (elle revient toute seule si elle change).
-Ctrl+I =commencer une recherche incrémentielle (taper les premières lettres).
Complétion automatique:
C'est la liste qui surgit quand on tape . , :: , -> ou Ctrl+Espace.
Elle complète ce que l'on a commencé à taper, ou propose la liste des éléments pouvant correspondre.
Taper la suite, ou sélectionner un élément avec haut/bas, puis taper un séparateur quelconque (espace, parenthèse ...) ou tabulation, et le nom est retapé en entier (avec correction majuscule/minuscule).
Pour en bénéficier avec les constructeurs, utiliser la syntaxe Classe::Classe( .
Le message d'aide visible dans cette liste, c'est les lignes de commentaires placées immédiatement à coté (//) ou au-dessus (plusieurs lignes, // ou /*...*/) de la déclaration ou de la définition.
Cela ne marche qu'avec les éléments globaux (variables, structures/classes, patrons, fonctions).
Exemple:
Divers
Si vous avez appelé l'aide par F1, cliquez sur le bouton sommaire (ou localiser) de la barre d'outils (pas l'onglet) pour voir dans quelle rubrique vous êtes.
La coloration syntaxique de base peut être enrichie : Menu "Tool/Option", onglet "Format", cadre "Colors", sélectionner "Number", "String" puis "Operator" et leur choisir une couleur "Foreground". Je propose respectivement bordeaux, gris foncé et rouge vif.
"Category: Source Windows" permet de choisir la police du code. Celles en gras sont recommandées (espacement fixe). "Lucida Console" dispose de petites tailles.
Les menus contextuels sont présents un peu partout, même dans le code. Ils s?appellent avec le clic doit.
-Sur une directive #include, propose d?ouvrir le fichier.
-Sur un nom, propose d?aller à sa déclaration/définition.
Quelques macros bien pratiques:
Menu "Tools/Macro", choisir "Macro File: SAMPLE".
-"ToggleCommentStyle" change une suite de commentaires // en /*...*/ et inversement.
-"AutoCompleteFromFile" complète un nom s'il se trouve déjà dans le fichier édité.
-Pour créer votre macro, taper un nom, choisir "Edit" et insérer des commandes texte
Exemple:
'DESCRIPTION: Écrit un en-tête pour les sources sous Visual C++.
ActiveDocument.Selection.StartOfDocument
ActiveDocument.Selection = "//Fait par: Votre nom"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "//le :"
ActiveDocument.Selection =Date
ActiveDocument.Selection = ", "
ActiveDocument.Selection =Time
ActiveDocument.Selection.NewLine
ActiveDocument.Selection = "//à : Votre lieu de travail"
ActiveDocument.Selection.NewLine
Pour composer sa barre d'outils:
On peut déplacer un outil en maintenant Alt enfoncé (Ctrl pour copier).
Déplacer hors de toute barre pour supprimer.
La barre de menu est une barre d'outils, on peut l'éditer.
Ouvrir menu "Tools/Customize" ou menu contextuel sur une barre puis "Customize" permet :
-De déplacer un outil ou article de menu existant directement (Ctrl pour copier).
-D?utiliser une macro en bouton/menu:
-activer le fichier macro dans l'onglet "Add-ins and Macro Files"
-dans l'onglet "Commands" choisir "Category: Macro", faire glisser une commande dans la barre d'outils.
Pré processeur
Pour pré compiler seulement, aller dans le menu "Project/Settings" puis onglet "C/C++", zone "Project Options" et rajouter au texte "/P" ou "/E" ou "/PE". Cela permet de vérifier si l'expansion des macros est correcte.
P: génère un fichier *.i dans le répertoire du projet (c'est du texte).
E: affiche dans la fenêtre output (attention au gros includes, genre windows.h).
Compilateur
Dans les options menu "Project/Settings", onglet "C/C++", catégorie "Customize", les cases à cocher :
-"Disable language extensions" permet de désactiver les spécificités Microsoft pour être sûr de faire du code conforme au standard ANSI.
-"Enable incremental compilation" permet de recompiler plus vite, mais génère de plus gros fichiers.
Le menu "Build/Rebuild All" permet de reconstruire tous les fichiers temporaires. Indispensable en cas de problèmes de temps système, de date de modification de fichiers, ou d?incohérence de compilation.
Ne pas oublier pas que les modes "Debug" et "Release" ont des options indépendantes.
Éditeur de liens
Pour changer le type d'un projet, aller dans le menu "Project/Settings", onglet "Link", zone "Project Options" et changer "/subsytem:" entre "console" et "windows".
Déboguage
Les options menu "Project/Settings", onglet "Debug", zones "Program arguments:" et "Working Directory:" permettent de spécifier le répertoire de travail et les arguments de l?exécutable.
Instructions de déboguage (ces instructions ne font rien en mode Release)
avec MFC (#include <afxwin.h> ):
TRACE(); //comme printf, mais s'affiche dans la fenêtre output en debug (go, F5)
ASSERT(); //suspend l'exécution si l'expression est fausse (0)
VERIFY(); //comme ASSERT, mais l'expression sera calculée en mode release également.
DEBUG_ONLY(); //auto informant, non ?
autres:
assert (); //ANSI (#include <assert.h> )
_ASSERT(); //#include <crtdbg.h>
Points d'arrêt
F9 pose/enlève un point d'arrêt. Lancée avec "Go", l'exécution s'y arrêtera. Ils peuvent être placés dans le code source, le code assembleur et la pile d?appel.
Le menu "Edit/Breakpoints" permet de:
-créer/éditer/déplacer/modifier les points d'arrêts.
-poser une condition à un arrêt existant.
-poser un arrêt conditionnel sur tout le source (pour une variable locale, préciser la fonction).
-poser un arrêt sur un message Windows.
Mode déboguage
On peut avancer jusqu'à n'importe quel point en y plaçant le curseur et en choisissant menu "Debug/Run to Cursor" (Ctrl+F10).
Placer le pointeur de souris sur une variable indique immédiatement sa valeur.
La fenêtre "Variables" (menu "View/Debug Windows" ) permet de voir et changer les valeurs des variables en cours.
La fenêtre "Call Stack" (menu "View/Debug Windows" ) permet, après un échec d'assertion, de remonter à la fonction appelante.
La fenêtre "Watch" (menu "View/Debug Windows" ) permet :
-D?y glisser une expression depuis le code.
-De connaître le type d?une variable. L?y sélectionner et appeler le menu contextuel et "Properties" (Alt+Entrée).
-De changer la valeur d?une variable facilement. Mettre comme nom var=valeur. La valeur sera affectée à var à chaque activation de l?onglet.
-De choisir le format d'affichage des valeurs. Il faut ajouter au nom "," et :
f float
c caractère
s chaîne
us chaîne unicode
wm message windows
l,h préfixe long/short pour les suivants :
d,i décimal signé
u décimal non signé
o octal non signé
x,X hexa
Il y en a d'autres à la rubrique "Symbols for Watch Variables" dans la MSDN.
Quelques includes pratiques
#include <limits.h> //valeurs min/max des types de base. Ex: INT_MAX est le maximum d?un int.
#include <limits> //idem en C++. Ex: numeric_limits<int>::max est le maximum d?un int.
Quelques constantes symboliques prédéfinies
ANSI
__STDC__ C standard
NDEBUG Not Debug
ANSI (chaînes entre "" )
__FILE__ Nom du fichier compilé
__TIMESTAMP__ Moment de la dernière modification du fichier
__LINE__ N° de ligne courante du fichier
__DATE__ Date courante
__TIME__ Heure courante
spécifique Microsoft
_MSC_VER Version du compilateur Microsoft
__cplusplus Source C++
_DLL Contexte Mutithread (avec DLL)
_MT Contexte Mutithread
_WIN32 Contexte Windows 32 bits
_CPPRTTI Informations de type à l?exécution activées
_CPPUNWIND Gestion des exceptions activé
_UNICODE Définir pour unicode (wide-character)
_MBCS Définir pour multibyte-character
_DEBUG Mode debug
Message édité par Musaran le 03-07-2002 à 04:27:02
---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone