Question

J'utilise Eclipse / PyDev pour tenter de trouver un moyen de déboguer du code utilisant subprocess.Popen pour créer un processus enfant: je souhaite pouvoir déboguer le processus enfant créé. Le problème est que je ne trouve pas de moyen de déboguer entre les processus, et je suppose que ce n’est pas possible. Pourtant, vous ne savez jamais jusqu'à ce que vous demandiez, et que je le fasse!

Un peu d’arrière-plan: j’ai un processus de construction complexe régi par Waf , qui appelle notre Testez les tests unitaires en appelant Nez comme requis: je souhaite les intégrer processus pour déboguer les échecs des tests unitaires. Je sais que je pourrais essayer de lancer directement nez à nez, mais le problème est que l’environnement que je dois configurer pour que nos modules se chargent correctement est assez complexe et je ne veux pas dupliquer le code pour le faire si je peux l’éviter.

Je suis au courant de le débogage à distance , mais c’est assez gênant car je dois appeler manuellement le débogueur dans le processus distant. Si quelqu'un connaît un moyen de faire ce que j'essaie de faire, ce serait très apprécié.

Était-ce utile?

La solution

Je ne semble pas que PyDev puisse le faire (ni PyDbg ni WinDbg), mais il semble que gdb puisse: http://wiki.python.org/moin/DebuggingWithGdb .

Autres conseils

J'ai trouvé un moyen de contourner le problème qui pourrait vous convenir.

Comme vous, j’ai tout d’abord trouvé l’option de débogage distant qui consiste à insérer manuellement les appels de pydevd.settrace () aux points de rupture souhaités. Mais j’ai aussi remarqué que les points de rupture ultérieurs de PyDev (c’est-à-dire ceux créés en cliquant dans la marge de gauche) ont été obéis. Il semble donc que vous ayez simplement besoin du premier appel explicite à settrace pour établir la session de débogage à distance du processus, puis à utiliser les points d'arrêt normaux du débogueur.

De plus, vous pouvez modifier l'appel settrace pour qu'il ne suspende pas le processus:

import pydevd
pydevd.settrace(suspend=False)

Donc, insérez le code ci-dessus quelque part au début de l'initialisation du sous-processus et vous devriez être bon. Encore un peu de bidouille, mais c’est définitivement mieux que la méthode manuelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top