2017-04-07 1 views
1

J'essaie d'exécuter python -m pdb -c continue foo.py, afin d'activer le débogage en cas d'erreur. Les arguments -c continue doivent allow me to do this sans spécifier 'c' au démarrage du programme. Cependant, je reçois l'erreur: Error: -c does not exist. Je vais démontrer les versions et la configuration ci-dessous avec un exemple virtualenv.python -m pdb -c poursuivre les arguments de l'indicateur non compris

$ virtualenv --version 
15.1.0 
$ virtualenv tempenv 
New python executable in tempenv/bin/python 
Installing setuptools, pip...done. 
$ source tempenv/bin/activate 
(tempenv)$ which python 
/usr0/home/eqzx/tempenv/bin/python 
(tempenv)$ python --version 
Python 2.7.6 
(tempenv)$ echo "1/0" > foo.py 
(tempenv)$ python foo.py 
Traceback (most recent call last): 
    File "foo.py", line 1, in <module> 
    1/0 
ZeroDivisionError: integer division or modulo by zero 

Puis:

(tempenv)$ python -m pdb -c continue foo.py 
Error: -c does not exist 

Après avoir installé pdb sur place dans le virtualenv:

(tempenv)$ pip install -I pdb 
(tempenv)$ which pdb 
/usr0/home/eqzx/tempenv/bin/pdb 
(tempenv)$ python -m pdb -c continue foo.py 
Error: -c does not exist 

Courir sans -c continue fonctionne très bien (même si je suis surpris de voir à l'aide /usr/lib/python2.7/pdb.py au lieu de pdb local? même quand j'ai réessayé avec virtualenv --no-site-packages, il a montré toujours ce même chemin):

(tempenv)$ python -m pdb foo.py 
> /usr0/home/eqzx/foo.py(1)<module>() 
-> 1/0 
(Pdb) c 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/pdb.py", line 1314, in main 
    pdb._runscript(mainpyfile) 
    File "/usr/lib/python2.7/pdb.py", line 1233, in _runscript 
    self.run(statement) 
    File "/usr/lib/python2.7/bdb.py", line 400, in run 
    exec cmd in globals, locals 
    File "<string>", line 1, in <module> 
    File "foo.py", line 1, in <module> 
    1/0 
ZeroDivisionError: integer division or modulo by zero 
Uncaught exception. Entering post mortem debugging 
Running 'cont' or 'step' will restart the program 
> /usr0/home/eqzx/foo.py(1)<module>() 
-> 1/0 
(Pdb) 

Répondre

2

Vous utilisez Python 2.7, qui doesn't support the -c parameter:

New in version 3.2: pdb.py now accepts a -c option that executes commands as if given in a .pdbrc file, see Debugger Commands .

En améliorant votre Python à la version 3.6 résoudrait le problème.

Je n'ai trouvé aucun paquet sur PyPI qui transfère le paquet 3.2 + pdb à Python 2.7. The one you were trying to install est une "base de données de mots de passe".

+0

également, [virtualenv] (https://github.com/pypa/virtualenv/blob/master/virtualenv.py) en soi ne semble pas transférer "pdb" (pas dans la liste 'REQUIRED_MODULES') – ewcz

+0

Je vois. Des suggestions sur la façon dont je pourrais modifier 'pdb.py' pour continuer malgré tout? Je veux faire continuer le comportement par défaut dans Python 2.7 – eqzx

+1

@eqzx: J'ai modifié ceci à partir de Python 3.5: https://gist.github.com/philiptzou/dbfbf727ad7127c8f276d312790eac9f. Cela semble fonctionner avec mon Python 2.7. Vous pouvez placer le fichier 'pdb.py' dans le même dossier avec le fichier à déboguer et lancer la commande. –