Juste une question de commodité. J'ai été un peu gâté par les débogueurs dans les IDE comme Visual Studio et XCode. Je trouve un peu maladroit d'avoir à taper import pdb; pdb.set_trace()
pour définir un point d'arrêt (je préfère ne pas importer pdb en haut du fichier car je pourrais l'oublier et le laisser).
Existe-t-il un moyen plus simple de définir un point d'arrêt dans le code Python, aussi simple et discret que ce que vous voyez dans un IDE?
python -m pdb <your_script>.py
alorsb <line_number>
pour définir le point d'arrêt au numéro de ligne choisi (pas de parenthèses de fonction). Appuyez surc
pour continuer vers votre point d'arrêt. Vous pouvez voir tous vos points d'arrêt en utilisant lab
commande seule. Tapezhelp
pour voir les autres commandes pdb disponibles lors du débogage.breakpoint()
fonction intégrée . python.org/dev/peps/pep-0553Réponses:
Vous pouvez exécuter votre programme
pdb
depuis la ligne de commande en exécutantIl se cassera sur la 1ère ligne, puis vous pourrez ajouter un point d'arrêt où vous le souhaitez dans votre code en utilisant la
break
commande, sa syntaxe est:Il est suffisamment flexible pour vous donner la possibilité d'ajouter un point d'arrêt n'importe où.
la source
pdb.set_trace()
vais dans le débogueur, utilise lal
commande (liste) et vois que je veux définir un point d'arrêt à la ligne 27, j'entrerai alors:b 27
et le débogueur définirait un point d'arrêt à la ligne 27 (j'ai trouvé la documentation un peu difficile à comprendre, je voulais donc ajouter ce point de clarification).x
et que vous souhaitez vous arrêter lorsque sa méthodef
est appelée, vous pouvez direbreak x.f
, et ensuitec(ontinue)
. Cela fonctionne même si l'objet se trouve dans un fichier inaccessible ou a été créé dynamiquement, par exemple en décrochant.b /data/users/me/project/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py:596
Vous pouvez utiliser:
la source
set_trace
uniquement lorsque j'utilise bp ()?Dans vim, j'ai une macro configurée pour cela (dans mon fichier .vimrc):
donc je peux simplement appuyer sur \ b (quand je ne suis pas en mode insertion) et il ajoute un point d'arrêt après la ligne actuelle, ou \ B (notez la majuscule) et il en met un avant la ligne actuelle.
qui semble bien fonctionner. La plupart des autres éditeurs de programmeurs «simples» (emacs, sublimetext, etc.) devraient avoir des moyens simples similaires de le faire.
Edit: j'ai en fait:
ce qui ne l'allume que pour les fichiers source python. Vous pouvez très facilement ajouter des lignes similaires pour javascript ou tout autre langage que vous utilisez.
Mise à jour 2019 (Python 3.7+)
Python 3.7+ a maintenant le builtin
breakpoint()
qui peut remplacer le précédentimport pdb; pdb.set_trace()
dans vim. Cela fonctionne toujours de la même manière.la source
set autoindent
dans votre fichier .vimrc .set autoindent
(et un tas d'autres options) en standard. L'une des premières choses que je fais avec un nouveau système est de tirer un meilleur vimrc ..."dyy
et chaque fois que vous en avez besoin, faites simplement"dp
ou"dP
. Apprenez les registres vim ! Ils sont très utiles et sont toujours pris en charge!qd
, puis"dp
collez plus tard . Enfin, assignez vos instructions à un registre donc toujours rempli lors du chargement de vim. Exemple:let @d = 'oimport pdb; pdb.set_trace()k0:w'
Maintenant, utilisez simplement@d
chaque fois que vous voulez coller la ligne dans un fichier. Ce qui précède enregistre également le fichier. Mais vous devrez enregistrer le vôtre (plutôt que copier / coller ci-dessus) car des caractères spéciaux sont impliqués (pour échapper, etc.).Si vous ne voulez pas définir manuellement des points d'arrêt à chaque fois que vous exécutez le programme (en Python 3.2+), par exemple, disons que vous voulez créer directement un point d'arrêt à la ligne 3 et y arrêter l'exécution:
python -m pdb -c "b 3" -c c your_script.py
Les informations suivantes peuvent vous aider:
la source
Je ne l'ai pas encore essayé mais ils ont juste implémenté un nouveau point d'arrêt intégré appelé breakpoint () dans Python 3.7, ce qui signifie que vous pouvez insérer un point d'arrêt avec une instruction maintenant:
la source
Voici comment vous utiliseriez pdb dans la ligne de commande sans rien implémenter dans votre code source (la documentation et les autres ressources en ligne ne font pas un bon travail pour expliquer cela à un programmeur qui n'a utilisé que des débogueurs visuels dans le passé):
Démarrez pdb en tapant ce qui suit dans une invite du shell:
Cette commande initialise pdb et le débogueur pdb s'arrêtera à la première ligne de votre python_script et attendra une entrée de votre part:
Il s'agit de l'interface de communication avec le débogueur. Maintenant, vous pouvez spécifier vos commandes ici. Contrairement à l'utilisation de boutons ou de raccourcis clavier dans les débogueurs visuels, vous utiliserez ici des commandes pour obtenir les mêmes résultats.
Vous pouvez aller à la ligne suivante de votre code par la commande "n" (suivant):
L'exécution d'un prochain afficherait le numéro de ligne et le code spécifique dans la source:
Vous pouvez définir un point d'arrêt en spécifiant un numéro de ligne dans votre code source.
Ici, le débogueur est défini pour interrompre à la ligne 50. S'il n'y a pas d'autres points d'arrêt, le point d'arrêt à la ligne 50 sera le premier et il pourrait être référencé par l'ID de point d'arrêt qui est 1 dans ce cas. Si vous ajoutez plus de points d'arrêt, ils obtiendront des identifiants séquentiellement (c'est-à-dire 2, 3, etc.)
Une fois qu'un point d'arrêt est défini, vous continuerez à exécuter votre programme jusqu'à ce que pdb atteigne le point d'arrêt comme suit:
Une fois que vous avez atteint un point d'arrêt, vous pouvez passer à la ligne suivante, avec la commande n comme décrit précédemment. Si vous souhaitez examiner les valeurs des variables, vous exécuterez la commande de paramètre comme suit:
Si vous n'avez plus besoin d'un point d'arrêt, vous pouvez l'effacer en passant l'id du point d'arrêt avec la commande clear:
Enfin, lorsque vous avez terminé avec le débogueur, vous pouvez quitter l'exécution comme vous le feriez pour l'interpréteur de ligne de commande python.
J'espère que cela aidera n'importe qui à démarrer avec pdb. Voici une liste de commandes que vous pouvez utiliser avec le débogueur: pdb so question and answers
la source
Python
3.7
a une nouvelle façon intégrée de définir des points d'arrêt. AppelPlus ici https://stackoverflow.com/a/53263117/6488361
la source
Vous pouvez utiliser un IDE qui prend en charge le débogage python, ou vous pouvez consulter l'excellent outil Winpdb. Qui fonctionne sur n'importe quelle plate-forme et fournit des fonctionnalités de débogage graphique à votre script python.
http://winpdb.org/
la source
Vous pouvez utiliser:
Tous les éléments ci-dessus prennent en charge le débogage python à partir d'un IDE.
la source
Dans Atom, si les plugins Python sont installés, vous pouvez simplement taper '
pdb
' et appuyer sur Entrée et l'extrait de code tapera import et trace pour vous.Je suis habitué à cela maintenant que parfois je le tape juste même si je le modifie dans vim et attend que la liste déroulante apparaisse.
la source
Une méthode sous-estimée consiste à définir directement le point d'arrêt dans pdb:
définira un point d'arrêt sur
site-packages\torch\__init__.py:10
ensuite
pdb> c
s'arrêtera sur ce point d'arrêt.Les éléments suivants sont également valables:
Voir doc pour plus de détails.
la source
Vous pouvez utiliser Vim avec le plugin Python-Mode ou Emacs avec Elpy plugin .
Ces plugins vous donnent des points d'arrêt avec des frappes faciles (
\ b
dans Vim etC-c C-u b
dans Emacs) ainsi que de nombreuses autres fonctionnalités des IDE lourds (pliage de code, refactoring, peluchage, etc.) - le tout dans un éditeur de texte léger basé sur un terminal.la source
Le moyen le plus simple d'exécuter le débogueur sur votre script est simplement
L'exécution de pdb sur une ligne de commande Linux donne
la source
pdb
? Ou d'où?