12
votes

Comment puis-je forcer la liaison à inclure une fonction dont j'ai besoin pendant le débogage?

Je fais souvent de petites méthodes pour aider le débogage, qui ne sont pas utilisés dans le programme actuel. Typiquement, la plupart de mes classes ont une méthode d'assignation que j'ajoute aux montres. Je sais que DELPHI 2010 a des visualiseurs, mais je suis toujours sur 2007.

considère cet exemple: xxx

si j'ajoute x.asstring comme une montre, je viens d'obtenir "Fonction à appeler, tmyclass.asstring, a été éliminée par linker".

Comment puis-je forcer la liaison à l'inclure? Mon astuce habituelle est de utiliser la méthode quelque part dans le programme, mais n'est-il pas un moyen plus élégant de le faire?

Réponse: GJ a fourni la meilleure façon de le faire. xxx


0 commentaires

3 Réponses :


6
votes

Vous pouvez faire fonction de la fonction publiée.

  TMyClass = class
    F : integer;
  published
    function AsString : string;
  end;


2 commentaires

Génial! Je ne savais pas que les méthodes publiées fonctionnaient de cette façon. Avez-vous une pointe pour les fonctions unitaires aussi?


Vous pouvez également mettre "publié" comme: {$ ifdef debug} publié {$ endif}



0
votes

Peut-être que cela fonctionne de les appeler dans une section d'initialisation, gardé par {ifdef débog} ou {ifopt D +}.


2 commentaires

Oui, cela fonctionnerait, mais je veux trouver une façon que ne veuille pas m'exige d'appeler la fonction quelque part.


Bien sûr que ce serait bien d'avoir. Mais au moins, c'est une solution de contournement qui ne farde pas la version de la libération. (Quel truc publié de GJ, BTW. :-))



6
votes

Sveinbringsli Demandez: "Avez-vous un pourboire pour les fonctions de l'unité aussi?"

Le compilateur Delphi est intelligent ... Donc, vous pouvez faire quelque chose comme ... xxx


6 commentaires

+1. C'est ce que je fais habituellement. Placez-le dans un bloc d'initialisation afin qu'il ne soit pas lié.


Je me luttais avec moi-même sur quelle réponse je devrais accepter - celle-ci ou votre autre réponse avec le "truc publié". J'ai choisi celui-ci parce que cela n'affectera pas la version de la libération.


Oui, et si votre fonction a besoin de paramètres comme des variables, écrivez simplement la section d'initialisation: "Si @Sasstring = nil puis;" au lieu de mettre des paramètres dans.


GJ, votre suggestion de commentaire fonctionne-t-elle vraiment? Je pourrais vous attendre à une "expression toujours d'évaluer toujours sur faux" indice, puis le compilateur pourrait retirer l'expression.


@Rob Kennedy: Dans mon cas de test, Uder D2007 fonctionne bien. Nous comprenons le compilateur pour d'abord insérer le code de fonction, puis testez l'adresse. Vous pouvez également définir un point d'arrêt sur cette ligne. Vérifie ça.


@Rob Kennedy: J'utilise également la phrase de sortie avant cette ligne. Donc, cette ligne ne sera jamais exécutée.