web-dev-qa-db-fra.com

Comment définir le point d'arrêt dans un autre module (ne le définissez pas sur la ligne de définition de la fonction, si vous souhaitez interrompre lorsque la fonction commence à être exécutée)

J'essaie de déboguer un module "principal", qui appelle une fonction "broken_function" à la ligne 356 de "another_module". J'ai une erreur dans cette fonction et je veux mettre un point d'arrêt à son début. Ci-dessous la liste. Est-ce que je fais quelque chose de mal? Parce que le point d'arrêt ne fonctionne pas:

$ python -m pdb main
(Pdb) import sys
(Pdb) sys.path.append("/home/user/path/to/another/module")
(Pdb) import another_module
(Pdb) b another_module:356
Breakpoint 1 at /home/user/path/to/another/module/another_module.py:356
(Pdb) c
Traceback (most recent call last):
...
File "/home/user/path/to/another/module/another_module.py", line 383, in broken_function
f=open("../jobs/temptree.tre", "r")
IOError: [Errno 2] No such file or directory: '../jobs/temptree.tre'
Uncaught exception. Entering post mortem debugging
...
35
Boris Burkov

Vous définissez correctement le point d'arrêt. J'imagine que cela ne s'arrête pas car la ligne de code sur laquelle vous vous brisez n'est pas appelée. Mettez la pause sur la ligne 383.

21
Riaz Rizvi

Vous pouvez également définir le point d'arrêt directement avec le numéro de fichier et de ligne, sans avoir à importer sys ou another_module.

(Pdb) b /home/user/path/to/another/module/another_module.py:383
Breakpoint 1 at /home/user/path/to/another/module/another_module.py:383

Notez que /home/user/path/to/another/module/another_module.py doit être importé et la ligne 383 doit être exécutable et dans le chemin d'exécution pour qu'elle se casse, comme d'autres l'ont souligné.

Pour plus d'aide, tapez help b (ou d'ailleurs help suivi de toute autre commande) pour obtenir plus d'informations sur cette commande.

4
user650654