Насколько я понимаю, оба отладчика 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)
В чем проблема?
Как определить набор функций, всегда доступных во время отладки?