2010-06-22 24 views
3

Je dois désactiver du code lorsqu'il est exécuté sous le débogueur.

Donc, je pense juste que faire:

{$IFNDEF DEBUG} 
    ... 
{$ENDIF} 

Cependant, le code à l'intérieur du ifndef est exécuté dans le débogueur, makin plantage.

J'ai lazarus 0.9.29 & CPF 2.4.0

Répondre

2

Les directives du compilateur que vous mentionnez sont en fait que: les directives du compilateur, pas les directives de débogage.

Elles concernent le processus de compilation, qui est complètement séparé du système de débogage.

Qu'est-ce que vous avez à faire est:

  • Lorsque vous voulez déboguer le programme, définir le symbole DEBUG. Cela ne compilera PAS les blocs qui existent dans les tests et ne fonctionnera pas sur la session de débogage.
  • Lorsque vous voulez libérer ce code, dé-initialisez simplement DEBUG et tout est prêt à être expédié.

Vous compliquez la compilation et le débogage et vous les placez dans le même contexte.
Ils résident réellement dans des contextes distincts complets.
Cela peut être dû au fait que vous compilez et déboguez sous le même système graphique, mais si vous compilez un programme, la seule chose que le débogueur recherche sont les points de rupture.

Espérons que ça aide.

Modifier: Vous pouvez le définir par un simple {$ DEFINE DEBUG} quelque part en haut de votre programme/unité ou utiliser le volet Options de Lazarus pour l'ajouter en tant que paramètre de ligne de commande.

Pour compléter ma réponse.

+0

Donc, le problème est que le symbole n'est pas défini par Lazarus ... où je peux le définir? – mamcx

+0

Vous pouvez le définir par un simple {$ DEFINE DEBUG} quelque part en haut de votre programme/unité ou utiliser le volet Options de Lazarus pour l'ajouter en tant que paramètre de ligne de commande. –

+0

Eh bien ce commentaire est la réponse. Merci. – mamcx

0
{$IFOPT D-} 
    //code 
{$ENDIF} 

si $ DEBUGINFO est activé avec débogueur!

+0

Salut VDPasha, bienvenue à stackoverflow. Pouvez-vous mieux détailler comment ce code va "faire fonctionner {$ IFNDEF DEBUG}' dans le projet lazarus/osx "ou pourquoi le code dans" ifopt "ne fera pas planter le débogueur comme" ifndef "(à partir de la question)? Quelle est la différence? – Armfoot

+0

L'option D +/- affiche les informations du débogueur [Debugger_Setup] (http://wiki.lazarus.freepascal.org/Debugger_Setup) signifie que l'application est construite en mode debug. – VDPasha

+1

{$ IFOPT D +} {$ DEFINE DEBUG} {$ ENDIF} :) – VDPasha