En tant qu'exercice d'apprentissage, je me écrivais une simple extension / plugin / cadre macro à l'aide de IronPython - j'ai obtenu les bases de travail, mais j'aimerais ajouter un support de débogage de base pour faciliter l'utilisation de mon éditeur de script de travailler avec . p>
Je cherche un peu sur Internet un peu et j'ai trouvé quelques bonnes ressources sur la rédaction de la rédaction de pipugeuses gérées (y compris l'excellent . Blog de débogage net et le MSDN DocuTaiton sur le API de débogage CLR ) - Je comprends que Ironpython est essentiellement en dehors de cela, je suis un peu perdu sur la façon de commencer, notamment: P>
(Je ne suis pas intéressé par l'aspect interface graphique de faire un débogueur pour l'instant - j'ai déjà eu une très bonne idée de la façon dont cela pourrait fonctionner) p>
3 Réponses :
Je ne suis pas d'expert à IronPython, mais j'ai une certaine expérience dans le débogage des applications gérées à l'aide de Windbg. J'ai regardé brièvement comment les applications Ironpython regardent dans le débogueur. En raison de la nature dynamique de Python, beaucoup de code est émis au moment de l'exécution. Cela fait de déboguer une application Ironpython un peu plus compliquée que de dire une application C # car vous avez une couche supplémentaire de génération de code afin de parler. p>
Harry Pierson qui était fortement impliqué dans le développement des langues de fer a une série de blogs sur Écrire un débogueur IronPython , qui a beaucoup de détails. p>
Merci pour le lien - je le lis à travers maintenant et ça a l'air bien.
Quelques liens supplémentaires ont commencé à en faire beaucoup plus clairement - il y a 2 façons d'ajouter un soutien de débogueur que j'ai vu: p>
Le premier consiste à utiliser le fait que IronPython émet une IL et de déboguer en utilisant des techniques standard utilisées pour le débogage des applications .NET. Harry Pierson ICI sur le développement de IPYDBG - un débogueur Python qui utilise cette approche. P>
En raison de cette limitation, la bibliothèque Microsoft.Scripting.Debugging a été fabriquée à la place, qui est beaucoup plus adaptée aux applications qui exécutent Ironpython "intégré" (c'est-à-dire dans le même processus). p>
Il y a une introduction à celle-ci ici et un article de blog plus étendu sur la façon dont il a utilisé ici - il consiste essentiellement à une fonction de rappel qui est exécutée à chaque fois que quelque chose" intéressant "se produit (chaque fois que nous entrons dans une fonction, chaque fois que nous entrons dans une fonction Il est temps de revenir d'une fonction et chaque fois qu'une ligne est exécutée). L'exécution du script est bloquée lorsque la fonction de rappel est en cours d'exécution, ce qui vous permet de "casser" le script. P>
J'ai décidé de prendre la deuxième approche - je vais mettre à jour cet article car je trouve plus d'informations qui pourraient être utiles à d'autres personnes qui pourraient essayer de le faire. P>
au logiciel Alternet ( www.altersetsoft.com ) Nous avons mis en œuvre le débogage de C # et IronPython, et Nous avons constaté que la principale différence que pour C # débogage, vous ne pouvez pas vraiment avoir du débogueur et que le script est débogué pour faire partie du même processus. Nous avons essayé peu de techniques décrites ici, mais ne pouvaient pas vraiment faire fonctionner de manière fiable. P>
https://docs.microsoft .Com / fr-US / Archive / Blogs / JMStall / You-Cant-Debug-vous-même P>
Donc, afin que vos scripts soient débogués, vous devez soit utiliser un débogueur autonome, soit pour écrire des scripts de manière à ce qu'ils puissent être compilés dans l'exécutable séparé (mais cela signifierait que pour accéder à l'application. -Define Objets Ce script devra interagir avec l'application à l'aide de techniques de communication interprocesses). Vous pouvez trouver un peu plus d'informations ici: https://www.alternetsoft.com/ Nouvelles / problèmes connus-de-net-script-exécutant-et-débogage p>
Les langues dynamiques, telles que IronPython, sont beaucoup plus permissives en ce sens - vous pouvez mettre en œuvre le débogage dans votre propre processus. P>
Le script étant débogué doit être exécuté dans le thread séparé, donc si nécessaire pour accéder aux objets d'application, cela doit être effectué en mode de sécurité de thread-Safe - comme à l'aide d'appels synchronisés sur le fil de l'interface utilisateur avec invoke. Potentiellement, il peut être évité avec la mise en œuvre de sa propre boucle de message lors du débogage, mais nous ne l'avons pas encore essayé (encore). P>
Dmitry P>
Cette question répond à une de mes questions: Stackoverflow.com/questions/676188/...