2016-05-23 2 views
2

Je voudrais pouvoir faire quelque chose comme ceci en utilisant visual C++ compilateur (VC12):Y at-il un visual C++ macro préprocesseur prédéfini qui vous permet de savoir quand le compilateur optimise

// If we have compiled with O2 
#ifdef _O2_FLAG_ 
bool debug_mode = false; 

// If we are in dirty slow non optimized land 
#else 
bool debug_mode = true; 
#endif 

Mais je ne peux pas trouver une macro prédéfinie à cet effet.

Contexte:

Le drapeau de debug_mode est utilisé comme:

if (!debug_mode && search_timer->seconds_elapsed() > 20) { 
    return best_result_so_far; 
} 

Le problème étant que dans une instance de débogage que je fais un pas dans cette tentative échoue constamment et des bombes me parce que bizarrement il me faut Il est beaucoup plus long de parcourir le code que le CPU le traverse normalement :-)

S'il y a une horloge sous-jacente qui s'arrête pendant le débogage, cela résoudrait aussi mon problème. Actuellement, j'utilise la différence entre deux appels à std :: chrono :: high_res_clock :: now().

EDIT:

En réponse à plusieurs commentaires expliquant pourquoi je ne veux pas faire ce que je veux faire, je reformule peut-être la question simplement: Y at-il un équivalent de __optimize__ gcc en cl?

+1

Même s'il existait, le préprocesseur ne peut pas vous dire que le compilateur * optimisera une unité de traduction (si aucune optimisation ne peut être faite), seulement qu'il * peut * – StoryTeller

+0

Vous allez à propos de ce mauvais façon. Vous devez améliorer vos compétences de débogage (par exemple, utilisez des points de trace au lieu de points de rupture, etc.). – IInspectable

+0

Utilisez un commutateur de compilation pour vérifier le mode de débogage. Presque tous les IDE ont la possibilité de définir le mode de débogage et de publication, avec différentes options de compilation. – Lundin

Répondre

4

Vous pouvez utiliser _DEBUG ou NDEBUG pour détecter la configuration de débogage. Techniquement, cela ne signifie pas la même chose que le drapeau d'optimisation, mais cela devrait suffire dans 99% des cas. Une autre option consisterait à ajouter vous-même une définition de préprocesseur au projet.

+0

Malheureusement, je dois construire avec les informations de débogage la plupart du temps, je construis aussi avec l'optimisation pour que le profileur fonctionne correctement ou je l'aurais fait. On dirait que le visuel C++ donne très peu de macros comme ça par rapport à gcc. Je me demandais si j'avais raté une belle page Web pleine d'entre eux quelque part. – sji