Yanıtlar:
Evet! Adında bir Python hata ayıklayıcısı varpdb
Sadece bunu yapmak için var!
Sen aracılığıyla bir Python programı başlatabilirsiniz pdb
kullanarak pdb myscript.py
veyapython -m pdb myscript.py
.
Daha sonra düzenleyebileceğiniz birkaç komut vardır. pdb
sayfada .
Hatırlanması gereken bazı yararlı noktalar:
b
: kesme noktası ayarlac
: bir kesme noktasına ulaşana kadar hata ayıklamaya devam ets
: kodda ilerleyinn
: sonraki kod satırına gitmek içinl
: geçerli dosya için kaynak kodunu listeler (varsayılan: yürütülmekte olan satırı içeren 11 satır)u
: yığın karesinde yukarı gitd
: yığın karesinde aşağı gitmep
: geçerli bağlamda bir ifadenin değerini yazdırmak içinKomut satırı hata ayıklayıcısı kullanmak istemiyorsanız, Pydev , Wing IDE veya PyCharm gibi bazı IDE'lerin GUI hata ayıklayıcısı vardır. Wing ve PyCharm ticari ürünlerdir, ancak Wing'in ücretsiz bir "Kişisel" sürümü vardır ve PyCharm'ın ücretsiz bir topluluk sürümü vardır.
pudb
bunun için harika. Ayrıcapydev
pdb
bir komut satırı aracı değildir. Kullanmak için kullanın python -m pdb your_script.py
.
pdb
komut python
paketin bir parçası . Her durumda, python -m <module>
gibi diğer şeyler için standart haline geliyor pip
, bu yüzden bunu varsayılan olarak kullanmak muhtemelen en iyisidir.
İlk adım, Python yorumlayıcısının hata ayıklama moduna girmesini sağlamaktır.
A. Komut Satırından
Python yorumlayıcısının komut satırından en düz yol
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
B. Tercüman İçinde
Modüllerin erken sürümlerini geliştirirken ve daha tekrarlı olarak denemek için.
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)
C. Programınızın İçinden
Büyük bir proje ve uzun süren bir modül için, alma pdb ve set_trace () kullanarak programın içinden hata ayıklamayı başlatabilir :
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __name__ == '__main__':
MyObj(5).go()
Daha dahili hale gelmek için adım adım hata ayıklama
Bir sonraki ifadeyi yürütün… “n” ile (sonraki)
Son hata ayıklama komutunu tekrarlama… ENTER ile
Hepsini bırak … “q” ile (çık)
Değişkenlerin değerinin yazdırılması… “p” ile (yazdır)
a) pa
(Pdb) istemini kapatma… “c” ile (devam)
Nerede olduğunuzu görmek… “l” ile (liste)
Altyordamlara adım atmak… “s” ile (adım adım)
Devam ediyor… ama sadece mevcut altyordamın sonuna… “r” ile (dönüş)
Yeni bir değer atayın
a) ! b = "B"
Bir kesme noktası ayarlayın
a) çamaşır numarasının kesilmesi
b) işlev ismini kır
c) dosya ismini kır: linenumber
Geçici kesme noktası
a) lastik numarası
Koşullu kesme noktası
a) koparmak linenumber, koşul
Not: ** Tüm bu komutlar ** pdb'den yürütülmelidir
Ayrıntılı bilgi için bakınız: -
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
Python'da 'pdb' adlı bir modül var. Python betiğinizin üstünde
import pdb
pdb.set_trace()
ve hata ayıklama moduna gireceksiniz. 'S' ile adım atabilir, 'n' ile 'gdb' hata ayıklayıcısında yapacağınız gibi bir sonraki satırı takip edebilirsiniz.
Python 3.7'den başlayarak breakpoint()
, hata ayıklayıcıyı girmek için yerleşik işlevi kullanabilirsiniz:
foo()
breakpoint() # drop into the debugger at this point
bar()
Varsayılan olarak, breakpoint()
içe aktarır pdb
ve arar pdb.set_trace()
. Ancak, hata ayıklama davranışını sys.breakpointhook()
ortam değişkeni üzerinden ve kullanımını denetleyebilirsiniz PYTHONBREAKPOINT
.
Daha fazla bilgi için PEP 553'e bakınız .
breakpoint
heyecanlandım. Ama sonra bunun sadece bir kısayol olduğunu öğrendim import pdb; pdb.set_trace()
ve bu beni üzdü. Python devs: Lütfen bağlam satırları, kalıcı komut geçmişi ve sekme otomatik tamamlama gibi temel GDB özellikleri ile PDB geliştirmeye odaklanın :-)
ipdb, pdb'ye IPython işlevselliği ekleyerek aşağıdaki BÜYÜK geliştirmeleri sunar:
Pdg'ye benzer şekilde, ipdb GDB'ye kıyasla hala mükemmel ve tamamen temelden uzaktır, ancak zaten pdb'ye göre büyük bir gelişme.
Kullanımı ile benzer pdb
, sadece ile yükleyin:
python3 -m pip install --user ipdb
ve ardından hata ayıklamak istediğiniz satıra ekleyin:
__import__('ipdb').set_trace(context=21)
Muhtemelen editörünüzden bunun için bir kısayol eklemek istiyorsunuz, örneğin Vim snipmate için:
snippet ipd
__import__('ipdb').set_trace(context=21)
sadece yazabilirim ipd<tab>
ve kesme noktasına kadar genişler. Daha sonra dd
her şey tek bir satırda bulunduğundan kaldırmak kolaydır .
context=21
bağlam satırlarının sayısını şöyle açıklar: Hata ayıklama sırasında ipdb'nin daha fazla bağlam satırı göstermesini nasıl sağlayabilirim?
Alternatif olarak, başlangıçtan itibaren programlarda hata ayıklayabilirsiniz:
ipdb3 main.py
ancak genellikle bunu yapmak istemezsiniz çünkü:
Alternatif olarak, ham pdb 3.2 ve üstü sürümlerde olduğu gibi, komut satırından bazı kesme noktaları ayarlayabilirsiniz:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
bir -c c
sebepten dolayı kırık olsa da: https://github.com/gotcha/ipdb/issues/156
python -m module
hata ayıklama şu şekilde sorulmuştur: Python -m ile çalışan bir Python modülünde komut satırından nasıl hata ayıklanır? ve Python 3.7 aşağıdakilerle yapılabileceğinden:
python -m pdb -m my_module
GDB'ye kıyasla hem pdb hem de ipdb'nin ciddi eksik özellikleri:
ipdb özel sıkıntılar:
Ubuntu 16.04'te test edildi, ipdb == 0.11, Python 3.5.2.
breakpoint()
Günümüzde yerini alan bir yöntem var import pdb; pdb.set_trace()
.
Ayrıca olası ortam değişkenleri gibi birkaç yeni özelliğe sahiptir .
Tümleşik hata ayıklayıcıya sahip bir IDE istiyorsanız, PyScripter'ı deneyin .
https://wiki.python.org/moin/PythonDebuggingTools
pudb pdb için iyi bir bırakma yerine geçer
Python Tutor acemiler için tasarlanmış çevrimiçi tek adımlı bir hata ayıklayıcıdır. Düzenleme sayfasına kod ekleyebilir ve ardından çalışmaya başlamak için "Yürütmeyi Görselleştir" i tıklayabilirsiniz.
Diğer şeylerin yanı sıra şunları destekler:
Bununla birlikte , pek çok şeyi de desteklemez , örneğin:
io.StringIO
ve io.BytesIO
bunun yerine: demoProgramlı olarak python kodu ile adımlama ve izleme de mümkündür (ve kolay!). Bak sys.settrace () Ayrıntılar için belgelere. Ayrıca burada başlamanıza yardımcı olacak bir eğitim.
PTVS'li Visual Studio sizin için bir seçenek olabilir: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
PyCharm, bir hata ayıklayıcı içeren Python için bir IDE'dir. Kodda gezinmek için PyCharm'ın hata ayıklayıcısını kullanma hakkında bir tanıtım için bu YouTube videosunu izleyin.
PyCharm Tutorial - PyCharm'ı kullanarak python kodunda hata ayıklama
Not: Bu bir onaylama veya inceleme amaçlı değildir. PyCharm, ödemesi gereken ticari bir üründür, ancak şirket, öğrencilere ve öğretmenlere ücretsiz bir lisansın yanı sıra ücretsiz ve açık kaynaklı bir "hafif" Topluluk sürümü sağlar.