Ik gebruik doorheen mijn code vaak iets als
om snel debug waarden te zien.
Natuurlijk zou ik ook kunnen watchen enzo en prullen met break points, maar ik vind dit onder gewone omstandigheden praktischer.
Ik heb er echter 2 problemen mee :
Hier werkt alles nog prima, want de _DEBUG token wordt gemaakt door visual studio als hij in Debug profiel staat, zodra ik naar release switch is alle nutteloze uitvoer weg.
Het is vrij logisch dat hier de preprocessor block bij b.cpp niet actief is. Dat is natuurlijk omdat die geinclude werd alvorens die tokens werden gedefinieerd.
Dus, dacht ik even slim te zijn en omdat alle includes op de eerste regels moeten staan (anders negeert hij ze straal, vind ik persoonlijk vrij flauw, in php kan je toch includen waar je wilt en interessante dingen mee maken) heb ik een aparte .h file gemaakt met alleen maar die ifdef _DEBUG blok in, dus alle debug switches.
Wel, dat werkt zolang je in de IDE bezig bent, dan markeert hij die blokken netjes als actief. Maar als ik compileer zegt hij njet, er komt geen debug uitvoer. Hij staat nog altijd in debug modus en alles... ik heb het nog nooit eerder als vandaag meegemaakt dat hij in de IDE het ene zegt (op gebied van preprocessor blokken) en na compilatie het andere waar blijkt te zijn.
Ik vind het vrij straf...Hoe kan ik nu op een goeie manier een overzicht aansturen van debug switches om blokken code doorheen de code uit te schakelen, zonder elke file apart te moeten af gaan en daar telkens de juiste define aan te zetten? Ik veronderstel dat ik het lijstje van visual studio met WIN32 en _DEBUG kan aanvullen, maar ik zou die instellingen liever met rust laten en gewoon in code files bezig blijven, dat is overzichtelijker.
Bijvraagje : Waarom indenteert hij trouwens al die preprocessor statements zo knal tegen de linkerkantlijn (niet dus)?
code:
1
| std::cout<<variabele<<std::endl; |
om snel debug waarden te zien.
Natuurlijk zou ik ook kunnen watchen enzo en prullen met break points, maar ik vind dit onder gewone omstandigheden praktischer.
Ik heb er echter 2 problemen mee :
- Bij GUI applicaties, ga je dan messageboxen tonen gaan (niet met cout natuurlijk, ik bedoel, ga je dan ter plekke messageboxen createn en die te voorschijn toveren?) - dat lijkt me namelijk helemaal niet netjes, dan kan tijdens een algoritme wel honderden messageboxen te voorschijn floepen. Veel fijner als je dat in een soort van logvenster zou kunnen tonen, of eventueel een speciaal debug venster. Iemand daar ervaring mee om dat netjes op te zetten?
- Je hebt meerdere klassen. Je wilt niet altijd alles debuggen, maar je wilt ook niet overal de debug statements beginnen uit slopen als je ze later opnieuw nodig hebt. Dus, ik zet er #ifdef statements rond zo dat ik 1 statement moet definen en dan zijn alle debug opdrachten in een stuk weer actief.
Tot zover alles goed. Nu groepeer ik een overzicht van al mijn debug statements meestal in een lijstje, zodat ik vanuit die lijst alles met behulp van comments aan & uit kan zetten. En nu komt het probleem : Blijkbaar is er iets mis met mijn include volgorde waardoor ik niks kan definen in die lijst, die ifdef blokken blijven inactief...
C++: a.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| #include "b.h" #ifdef _DEBUG #define DEBUG_A #define DEBUG_B #define DEBUG_C #endif int main() { #ifdef DEBUG_A cout<<something; #endif } |
Hier werkt alles nog prima, want de _DEBUG token wordt gemaakt door visual studio als hij in Debug profiel staat, zodra ik naar release switch is alle nutteloze uitvoer weg.
C++: b.cpp
1
2
3
4
5
6
| void func() { #ifdef DEBUG_B cout<<something; #endif } |
C++: b.h
1
| void func(); |
Het is vrij logisch dat hier de preprocessor block bij b.cpp niet actief is. Dat is natuurlijk omdat die geinclude werd alvorens die tokens werden gedefinieerd.
Dus, dacht ik even slim te zijn en omdat alle includes op de eerste regels moeten staan (anders negeert hij ze straal, vind ik persoonlijk vrij flauw, in php kan je toch includen waar je wilt en interessante dingen mee maken) heb ik een aparte .h file gemaakt met alleen maar die ifdef _DEBUG blok in, dus alle debug switches.
Wel, dat werkt zolang je in de IDE bezig bent, dan markeert hij die blokken netjes als actief. Maar als ik compileer zegt hij njet, er komt geen debug uitvoer. Hij staat nog altijd in debug modus en alles... ik heb het nog nooit eerder als vandaag meegemaakt dat hij in de IDE het ene zegt (op gebied van preprocessor blokken) en na compilatie het andere waar blijkt te zijn.
Ik vind het vrij straf...Hoe kan ik nu op een goeie manier een overzicht aansturen van debug switches om blokken code doorheen de code uit te schakelen, zonder elke file apart te moeten af gaan en daar telkens de juiste define aan te zetten? Ik veronderstel dat ik het lijstje van visual studio met WIN32 en _DEBUG kan aanvullen, maar ik zou die instellingen liever met rust laten en gewoon in code files bezig blijven, dat is overzichtelijker.
Bijvraagje : Waarom indenteert hij trouwens al die preprocessor statements zo knal tegen de linkerkantlijn (niet dus)?