[IPdb] Les débutants en développement Web ont tenté de résumer le débogage avec Python

introduction

Je vais résumer le débogage à l'aide d'ipdb, y compris l'organisation de ce que les débutants en développement Web ont appris.

Qu'est-ce que ipdb?

Il fournit une extension de pdb, qui est un ** débogueur ** fourni en standard avec Python.

Comment utiliser

Entrez le code suivant à l'endroit où vous souhaitez démarrer le débogueur et exécuter le programme.

import ipdb; ipdb.set_trace()

Lorsqu'il est exécuté, il attend ** l'entrée standard **, vous pouvez donc faire fonctionner le débogueur en entrant une commande. Ce qui suit est un résumé des commandes fréquemment utilisées (probables).

commander mouvement
n Passer à la ligne suivante
s Exécuter jusqu'à la fonction suivante
p nom de variable Afficher la valeur de la variable
a Afficher les arguments de la fonction en cours d'exécution
h Aidez-moi
q Fin

Essayez d'utiliser

Utilisons en fait ipdb en utilisant le programme Aggressive Cows de POJ No.3468.

Aggressive.py


import ipdb
n = 5
m = 3
x = [1, 2, 8, 4, 9]

def C(d):
    last = 0
    for _ in range(1, m):
        crt = last + 1
        while crt<n and x[crt]-x[last]<d:
            crt += 1
        if crt == n:
            return False
        last = crt
    return True

x.sort()
lb, ub = 0, max(x)

while ub-lb > 1:
    ipdb.set_trace()
    mid = int( (lb+ub)/2 )
    if C(mid):
        lb = mid
    else:
        ub = mid

print(lb)

Exécuter.

$ python Aggressive.py
>c:/users/~/aggressive.py(21)<module>()
     20     import ipdb; ipdb.set_trace()
---> 21     mid = int( (lb+ub)/2 )
     22     if C(mid):

Le point d'arrêt défini est affiché sous forme de flèche.

ipdb> h

Documented commands (type help <topic>):
========================================
EOF    cl         disable  interact  next    psource  rv         unt
a      clear      display  j         p       q        s          until
alias  commands   down     jump      pdef    quit     source     up
args   condition  enable   l         pdoc    r        step       w
b      cont       exit     list      pfile   restart  tbreak     whatis
break  continue   h        ll        pinfo   return   u          where
bt     d          help     longlist  pinfo2  retval   unalias
c      debug      ignore   n         pp      run      undisplay

Miscellaneous help topics:
==========================
exec  pdb

Une liste de commandes utilisables est sortie.

ipdb> p mid
*** NameError: name 'mid' is not defined

La variable «mid» n'est pas définie car la ligne 21 n'a pas encore été exécutée.

ipdb> n
> c:/users/~/aggressive.py(22)<module>()
     21     mid = int( (lb+ub)/2 )
---> 22     if C(mid):
     23         lb = mid

La flèche indiquant le point d'arrêt se décale de un.

ipdb> p mid
4

Puisque la 21e ligne est exécutée, la valeur de la variable «mid» est affichée.

ipdb> s
--Call--
> c:/users/~/aggressive.py(6)C()
      5 
----> 6 def C(d):
      7     last = 0

Il semble que l'appel à la fonction suivante a été exécuté.

ipdb> a
d = 4

Puisque l'appel à la fonction suivante était juste en dessous, la valeur de la variable «mid» confirmée plus tôt est affichée comme argument.

ipdb> q
Exiting Debugger.

Quittez le débogueur.

Résumé

J'ai utilisé toutes les commandes (probables) qui sont souvent utilisées dans ipdb. C'était la première fois que j'utilisais le débogueur, mais j'ai exécuté le programme ** à mi-chemin ** et vérifié le contenu des variables à chaque fois, ou je l'ai exécuté à la position souhaitée sans réécrire le programme. J'ai trouvé très pratique d'y aller. Il est difficile d'écrire un programme car il s'agit d'un débogage, je veux donc utiliser à bon escient le débogueur pour écrire un programme efficace et sans erreur.

Recommended Posts

[IPdb] Les débutants en développement Web ont tenté de résumer le débogage avec Python
[Django-Extensions] Les débutants en développement Web ont essayé de résumer Django-Extensions
les débutants en python ont essayé de le découvrir
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
[Pandas] J'ai essayé d'analyser les données de ventes avec Python [Pour les débutants]
J'ai essayé de résumer les remarques de tout le monde sur le slack avec wordcloud (Python)
J'ai essayé de résumer la gestion des exceptions Python
[Épisode 2] Les débutants ont essayé Numeron AI avec python
[Épisode 3] Les débutants ont essayé Numeron AI avec python
Entrée standard Python3 que j'ai essayé de résumer
[Épisode 0] Un débutant a essayé Numeron AI avec python
[Épisode 1] Un débutant a essayé Numeron AI avec python
[Pour les débutants] Essayez le web scraping avec Python
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
Un débutant en Python a essayé de coder une boisson énergisante
Introduction à Tornado (1): Framework Web Python démarré avec Tornado
[Dernière histoire] Un débutant a essayé Numeron AI avec python
La requête [Développement Web avec Python] est également redirigée
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé d'automatiser la fabrication des sushis avec python
Vitesse explosive avec Python (bouteille)! Développement d'API Web
[Développement Web avec Python] Précautions lors de l'enregistrement des cookies
Un débutant en apprentissage automatique a essayé de créer un modèle de prédiction de courses de chevaux avec python
Débogage facile avec ipdb
J'ai essayé de résumer comment utiliser matplotlib de python
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
L'ingénieur NW a essayé d'agréger les adresses avec le netaddr de Python
J'ai essayé d'implémenter le perceptron artificiel avec python
Les débutants en Python sont bloqués dans leur premier scraping Web
J'ai essayé de résumer comment utiliser les pandas de python
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
[Pour les professionnels de la compétition débutants] J'ai essayé de résoudre 40 questions AOJ "ITP I" avec python
[Pour les débutants] Web scraping avec Python "Accédez à l'URL de la page pour obtenir le contenu"
[AWS] J'ai essayé de créer un environnement Python avec un environnement de développement eb [Elastic Beanstalk]
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
Web scraping avec python + JupyterLab
J'ai essayé de créer diverses "données factices" avec Python faker
J'ai essayé différentes méthodes pour envoyer du courrier japonais avec Python
Essayez d'afficher diverses informations utiles pour le débogage avec python
Débogage avec pdb en Python
Connectez-vous à Wikipedia avec Python
Publiez sur Slack avec Python 3
Développement d'applications Web avec Flask
J'ai essayé de développer une application Web et j'ai réfléchi à la manière d'éviter que les débutants ne tombent malades.
[Part.2] Exploration avec Python! Cliquez sur la page Web pour vous déplacer!
3 raisons pour lesquelles les débutants en programmation devraient commencer avec Python
API Web avec Python + Falcon
[Python] J'ai essayé de visualiser des tweets sur Corona avec WordCloud