Main

Main.TutoPythonDebug History

Hide minor edits - Show changes to output

June 26, 2017, at 11:57 AM EST by 132.227.202.156 -
Changed lines 36-85 from:
On alors la main, et on peut demander la valeur de @@i@@ ou n'importe quelle variable locale.
to:
On alors la main, et on peut demander la valeur de @@i@@ ou n'importe quelle variable locale.



!!!%part% Equivalent python de @@dbstop if error@@

Malheureusement, c'est plus dur en python...


(:source lang=python:)
import pdb, traceback, sys
import numpy as np


def maMethode(v):
    for i in range(10):
        print("Hello ",v[i])
    print("Finished ") # passage impossible vue la taille de v...

def bombs():
    maMethode(np.arange(8))


if __name__ == '__main__':
    try:
        bombs()
    except:
        type, value, tb = sys.exc_info()
        traceback.print_exc()
        pdb.post_mortem(tb)
(:sourceend:)

le programme plante et rend la main, '''mais il rend la main DANS la fonction qui a planté'''

  Hello  0
  Hello  1
  Hello  2
  Hello  3
  Hello  4
  Hello  5
  Hello  6
  Hello  7
  > <ipython-input-2-02f871063e4c>(7)maMethode()
  -> print("Hello ",v[i])
  (Pdb) >? i
  8
  (Pdb)
  >?

Nous avons accès à @@i@@
June 26, 2017, at 11:47 AM EST by 132.227.202.156 -
Added lines 1-36:
%define=part apply=block bgcolor=#e6d8c0%
%define=exo apply=block bgcolor=#ffbbbb%

!![[Main.TutoPython|Retour vers le tutoriel complet]]


Nous utilisons python comme un langage de script... De fait, nous avons la main sur l'espace des variables en fin d'exécution et le debugage est plutôt aisé...
La question générale est: comment reprendre la main au milieu d'une méthode?

!!!%part% Debug avec un point d'arret

Le but de cette section est de rendre la main, temporairement, à l'utilisateur au milieu d'une méthode.

(:source lang=python:)
import pdb

def maMethode(v):
    for i in range(10):
        if(i==3):
            pdb.set_trace()
        print("Hello ",v[i])

maMethode(np.arange(12))
(:sourceend:)

Permet d'obtenir le comportement suivant:

  Hello  0
  Hello  1
  Hello  2
  > <ipython-input-8-d0ad2c83c5f3>(7)maMethode()
  -> print("Hello ",v[i])
  (Pdb)
  >?

On alors la main, et on peut demander la valeur de @@i@@ ou n'importe quelle variable locale.