10
votes

Compiler interrupteur pour activer / désactiver les messages de débogage?

OK, alors voici une simple question. J'ai écrit une fonction débogage :: string -> io () . J'aimerais donner des choses de sorte que lorsque je compile mon programme une solution, cette fonction écrit à l'erreur standard, et si je compile mon programme d'une autre manière, cette fonction devient no-op. Y a-t-il un interrupteur de compilation facile pour faire cela? Ou devrais-je devoir mettre en œuvre quelque chose moi-même?


2 commentaires

Avez-vous envisagé d'utiliser débog.trace ? Débogage Haskel donne un peu de détail décent.


@Devnull trace ne fera pas ce que je veux - mais traceio pourrait ...


3 Réponses :


11
votes

Je ne pense pas que l'adoption de trace est la bonne approche pour résoudre ce problème.

à la place, vous pouvez utiliser un prétraiteur pour désactiver / activer les messages de débogage. Placez ce qui suit dans un fichier séparé: xxx

le {- # langue cpp # -} ligne active le pré-processus C pour le fichier actuel. Vous pouvez ensuite compiler le fichier avec / sans débogage en utilisant ghc -ddebug ou juste ghc .


0 commentaires

9
votes

Vous pouvez le faire à l'aide du préprocesseur du CPP et de #Ifdef .

  1. Tout d'abord, utilisez #Ifdef pour choisir entre les deux versions de la fonction. XXX

  2. Puis, ajoutez un drapeau à votre fichier .cabal pour le contrôler. XXX

  3. Enfin, pour activer le débogage, actionnez le drapeau avec -f lors de la configuration: XXX


0 commentaires

1
votes

Pour compléter les excellentes réponses données ici, je voudrais mentionner cette approche, au cas où les gens (comme moi) utilisent la dernière version de pile code> avec hpack code> .

dans le fichier package.yaml code> J'ai ajouté ce qui suit: p>

stack build --flag "your-package:debug"


0 commentaires