12
votes

Comment déboguer Delphi Ide?

Quelles sont les étapes détaillées sur la manière de déboguer le Delphi IDE?

Je comprends, à partir d'autres postes, que l'on doit créer un projet et, dans les paramètres de débogage du projet, définissez "l'application hôte" du projet sur Delphi ( C: \ Program Files \ Borland \ BDS \ 3.0 \ \ Bin \ bds.exe ). Ensuite, lorsque le projet est exécuté dans le débogueur (en appuyant sur la touche F9 ), une seconde instance de l'IDE Delphi doit apparaître.

J'ai réussi à faire l'étape ci-dessus. Cependant, lorsque j'exécute le projet en mode de débogueur, je ne vois aucune instance de l'ouverture de Delphi IDE.

Motivation

Il y a un VCL composant, pour lequel je dispose du code source, qui construit, compile et installe bien. Mais, lorsqu'il est placé sur une forme dans un projet, Delphi est suspendu lorsque vous fermez le formulaire. Donc, je veux savoir pourquoi Delphi gèle à la sortie de ce composant sur un formulaire. (Il est suspendu au moment de la conception, lors de la fermeture du projet).


5 commentaires

Qu'entendez-vous par débogage: voir l'autre processus (la deuxième IDE) fonctionnant sous le débogueur (le premier IDE), ou souhaitez-vous réellement trouver et supprimer un certain bogue? Demander parce que la question et le titre lui donnent l'impression de déboguer l'IDE lui-même! Vous pouvez sûrement le voir courir sous votre débogueur, mais trouver et supprimer des bugs est une autre histoire: vous avez besoin de code source pour cela, et vous n'avez pas de code source pour l'IDE!


Désolé de ne pas être plus clair. Il existe un composant VCL, pour lequel je dispose du code source, qui construit, compile et s'installe bien. Mais, lorsqu'il est placé sur une forme dans un projet, Delphi est suspendu lorsque vous fermez le formulaire. Donc, je veux savoir pourquoi Delphi gèle à la sortie de ce composant sur un formulaire.


J'ai ajouté vos éclaircissements comme une modification de la question elle-même, car c'est là que tout le monde cherchera des éclaircissements. Demander plus de clarifications: vous dites que vous avez un DPK en tant que seul projet actif, vous définissez une application hôte à l'IDE Delphi, Hit Run et elle ne lance pas l'IDE? Est-ce que ça fait autre chose? Exemple: Cela vous donne-t-il un message d'erreur?


Jetez un coup d'œil à quelque chose comme Codesite de Raize. Ajouter des lignes CoDesite.Send pour tous les paramètres et les outs de l'opération de votre composant. Il y a une utilitaire IDE pour aider à faire cela pour toutes les fonctions. Cela vous aidera à apprendre ce qui se passe et pourquoi. Et il n'interfère pas avec l'opération comme apparaître des messages de messagerie, etc.


idefixpack.de/blog/2018/12/debugging -le-rad-studio-IDE


4 Réponses :


10
votes

Votre projet est probablement un type EXE. Les projets de type EXE n'ont pas besoin d'applications hôtes afin que le paramètre soit ignoré, aucun autre IDE n'est lancé. Au minimum, vous devriez faire votre projet un type DLL: qui démarrera la deuxième IDE, mais elle ne sera pas très utile.

La technique que vous avez mentionnée est généralement utilisée pour déboguer vos projets packages de conception. Créez un projet de package de temps de conception, installez-le dans l'IDE, définissez l'application hôte du projet pour être l'IDE, définissez quelques points d'arrêt, cliquez sur F9 et une deuxième copie de Delphi commencera.

Vous pouvez également "déboguer" le Delphi IDE en démarrant manuellement une seconde copie vous-même, puis en utilisant la commande "Joindre à Process" dans le menu "Run", mais cela ne sera pas très utile car vous ne pouvez pas facilement Trouvez votre code pour définir un point d'arrêt.


2 commentaires

Désolé de ne pas être plus clair. Il existe un composant VCL, pour lequel je dispose du code source, qui construit, compile et s'installe bien. Mais, lorsqu'il est placé sur une forme dans un projet, Delphi est suspendu lorsque vous fermez le formulaire. Donc, je veux savoir pourquoi Delphi gèle à la sortie de ce composant sur un formulaire.


Merci cosmin prund. Votre réponse a fonctionné pour obtenir la 2ème copie de l'IDE en cours d'exécution. Je peux maintenant envisager de déboguer le composant.



1
votes

First Recherchez et ouvrez les packages de composants, tournez à la fois les options de construction de package d'exécution et de conception de la version à débogage, si elles ne sont pas déjà et reconstruisent.

Enregistrer un groupe de projet contenant les deux projets de package (un Temps de conception et une heure d'exécution, dans certains cas exceptionnels, les gens n'ont qu'un seul package, qui est conception Time + Runtime en un). P>

Suivez ensuite les étapes pour définir BDS.exe comme application hôte. P>

Je serais tenté d'ajouter quelques messages de sortie code> sur le composant que vous connaissez est cassé: p>

constructeur: p> xxx pré> Destructor: P>

 finalization
      OutputDebugString('Finalization section for Unit MyComponentUnit');
 end.


2 commentaires

L'OP a dit que c'était à propos d'un "... un composant VCL, pour lequel J'ai le code source ". Il ne semble pas y avoir à propos de DPK avec la source manquante, à moins que vous sachiez quelque chose qui n'est pas affiché ici.


Bon point. Ma réponse a été fondamentalement boolean - en face de ce qui était nécessaire. Fixé.



1
votes

Si la deuxième instance de Delphi ne lance pas, vous avez le chemin d'accès à BDS.exe incorrect.


1 commentaires

Le chemin est correct car j'ai eu l'emplacement en cliquant avec le bouton droit de la souris sur l'icône de raccourcis Delphi 2005 (BDS.EXE) et en copiant l'emplacement de la cible. Si je dépassais tout le chemin dans une fenêtre d'explorateur, Delphi 2005 commence également. Alors chemin est correct.



2
votes

Je vérifierais d'abord si le suspendre survient au temps d'exécution ainsi qu'au temps de conception. Instancez le composant de manière dynamique dans votre code d'exécution. Si le systill à suspension se produit, vous pouvez passer à travers le code source du composant normalement à l'aide d'une seule instance de débogueur. Vous n'avez pas besoin de déboguer dans une instance IDE en cours d'exécution à moins que le comportement ne se produit que dans le processus IDE.


1 commentaires

La suspension ne se produit que dans le temps de conception et non d'exécution. Si je crée un projet simple, avec une forme, placez le composant de problème et exécutez le projet, il fonctionne bien et se termine même bien. Mais lorsque j'essaie de fermer le projet dans l'IDE ou la sortie Delphi avec ce projet ouvert, Delphi est suspendu. Par conséquent, je veux savoir ce qui provoque la pendaison de l'IDE.