область определения python ipdb init file (~ / .dpbrc) - PullRequest
0 голосов
/ 17 января 2019

Насколько я понимаю, оба отладчика Python, pdb и ipdb используют один и тот же файл инициализации: ~ / .pdbrc.

Моя цель - написать набор инструментов отладки Python (то есть функций), которые я могу использовать при отладке (должен быть всегда доступен).

Для иллюстрации инструмент называется myplot () в примере ниже. Я также прочитал из https://phdru.name/Software/dotfiles/python/pdbrc.html, что файл инициализации не должен включать python как таковой ... Что я чувствую странно, поскольку оператор import действительно является python. Но это объясняет (возможно, бесполезный) execfile ниже.

my ~ / .pdbrc:

import matplotlib.pyplot as plt
import numpy as np
plt.ion()
import os
execfile(os.path.expanduser("~/.pdbrc.py"))

my ~ / .pdbrc.py:

import matplotlib.pyplot as plt
import numpy as np
plt.ion()
def myplot(x):
   print "myplot"
   plt.plot(x)

Теперь я пытаюсь отладить foo.py, который импортирует bar.py. Вызов myplot () работает при отладке основной программы foo.py, но в bar.py символ не определен:

foo.py:

import numpy as np
import bar
import ipdb
ipdb.set_trace()
var1 = np.array([1,3,1])
var2 = bar.get_var2()

bar.py:

import numpy as np
def get_var2():
    var2 = np.array([1,3,1])
    return var2

Запуск ipdb:

> /home/erachmi/testboard/sw/python/example/tmp/foo.py(7)<module>()
      6 ipdb.set_trace()
----> 7 var1 = np.array([1,3,1])
      8 var2 = bar.get_var2()

ipdb> n
> /home/erachmi/testboard/sw/python/example/tmp/foo.py(8)<module>()
      6 ipdb.set_trace()
      7 var1 = np.array([1,3,1])
----> 8 var2 = bar.get_var2()

ipdb> myplot(var1)
myplot            ##Note: the graph is also displayed here, all fine.
ipdb> s
--Call--
> /home/erachmi/testboard/sw/python/example/tmp/bar.py(4)get_var2()
      3 import numpy as np
----> 4 def get_var2():
      5     var2 = np.array([1,3,1])

ipdb> n
> /home/erachmi/testboard/sw/python/example/tmp/bar.py(5)get_var2()
      4 def get_var2():
----> 5     var2 = np.array([1,3,1])
      6     return var2

ipdb> n
> /home/erachmi/testboard/sw/python/example/tmp/bar.py(6)get_var2()
      5     var2 = np.array([1,3,1])
----> 6     return var2
      7 

ipdb> myplot(var2)
*** NameError: name 'myplot' is not defined

Символ "myplot" больше не виден ... (в пределах bar.py) В чем проблема? Как определить набор функций, всегда доступных во время отладки?

...