İş Parçacığı Uygulamalarında Hata Ayıklama

Bu bölümde, iş parçacığı uygulamalarında nasıl hata ayıklanacağını öğreneceğiz. Ayrıca hata ayıklamanın önemini de öğreneceğiz.

Hata Ayıklama nedir?

Bilgisayar programlamasında hata ayıklama, bilgisayar programındaki hataları, hataları ve anormallikleri bulma ve kaldırma işlemidir. Bu süreç, kod yazılır yazılmaz başlar ve kod bir yazılım ürünü oluşturmak için diğer programlama birimleriyle birleştirildiği için birbirini takip eden aşamalarda devam eder. Hata ayıklama, yazılım test sürecinin bir parçasıdır ve tüm yazılım geliştirme yaşam döngüsünün ayrılmaz bir parçasıdır.

Python Hata Ayıklayıcı

Python hata ayıklayıcı veya pdbPython standart kitaplığının bir parçasıdır. Bulunması zor hataları izlemek için iyi bir geri dönüş aracıdır ve hatalı kodu hızlı ve güvenilir bir şekilde düzeltmemizi sağlar. Aşağıdakiler en önemli iki görevdir.pdp hata ayıklayıcı -

  • Çalışma zamanında değişkenlerin değerlerini kontrol etmemizi sağlar.
  • Kodda ilerleyebilir ve kesme noktaları da belirleyebiliriz.

Pdb ile aşağıdaki iki şekilde çalışabiliriz -

  • Komut satırı aracılığıyla; buna postmortem hata ayıklama da denir.
  • Etkileşimli pdb çalıştırarak.

Pdb ile çalışmak

Python hata ayıklayıcı ile çalışmak için, hata ayıklayıcıya girmek istediğimiz konumda aşağıdaki kodu kullanmamız gerekir -

import pdb;
pdb.set_trace()

Komut satırı üzerinden pdb ile çalışmak için aşağıdaki komutları göz önünde bulundurun.

  • h(help)
  • d(down)
  • u(up)
  • b(break)
  • cl(clear)
  • l(list))
  • n(next))
  • c(continue)
  • s(step)
  • r(return))
  • b(break)

Aşağıda Python hata ayıklayıcısının h (yardım) komutunun bir demosu yer almaktadır -

import pdb

pdb.set_trace()
--Call--
>d:\programdata\lib\site-packages\ipython\core\displayhook.py(247)__call__()
-> def __call__(self, result = None):
(Pdb) h

Documented commands (type help <topic>):
========================================
EOF   c         d       h        list     q       rv      undisplay
a     cl        debug   help     ll       quit    s       unt
alias clear     disable ignore   longlist r       source  until
args  commands  display interact n        restart step    up
b     condition down    j        next     return  tbreak  w
break cont      enable  jump     p        retval  u       whatis
bt    continue  exit    l        pp       run     unalias where

Miscellaneous help topics:
==========================
exec pdb

Misal

Python hata ayıklayıcı ile çalışırken, aşağıdaki satırları kullanarak kesme noktasını komut dosyasının herhangi bir yerinde ayarlayabiliriz -

import pdb;
pdb.set_trace()

Kesme noktasını ayarladıktan sonra, betiği normal şekilde çalıştırabiliriz. Komut dosyası belirli bir noktaya kadar çalışacaktır; bir hat ayarlanana kadar. Komut dosyasının çeşitli yerlerinde yukarıda belirtilen satırları kullanarak komut dosyasını çalıştıracağımız aşağıdaki örneği düşünün:

import pdb;
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
print (final)

Yukarıdaki script çalıştırıldığında, programı a = “aaa” olana kadar çalıştıracaktır, aşağıdaki çıktıda bunu kontrol edebiliriz.

Çıktı

--Return--
> <ipython-input-7-8a7d1b5cc854>(3)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
*** NameError: name 'b' is not defined
(Pdb) p c
*** NameError: name 'c' is not defined

Pdb'de 'p (yazdır)' komutunu kullandıktan sonra, bu komut dosyası yalnızca 'aaa' yazdırıyor. Bunu bir hata izliyor çünkü kesme noktasını a = "aaa" olana kadar ayarladık.

Benzer şekilde, kesme noktalarını değiştirerek komut dosyasını çalıştırabilir ve çıktıdaki farkı görebiliriz -

import pdb
a = "aaa"
b = "bbb"
c = "ccc"
pdb.set_trace()
final = a + b + c
print (final)

Çıktı

--Return--
> <ipython-input-9-a59ef5caf723>(5)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
'bbb'
(Pdb) p c
'ccc'
(Pdb) p final
*** NameError: name 'final' is not defined
(Pdb) exit

Aşağıdaki komut dosyasında, programın son satırında kesme noktasını ayarlıyoruz -

import pdb
a = "aaa"
b = "bbb"
c = "ccc"
final = a + b + c
pdb.set_trace()
print (final)

Çıktı aşağıdaki gibidir -

--Return--
> <ipython-input-11-8019b029997d>(6)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
'bbb'
(Pdb) p c
'ccc'
(Pdb) p final
'aaabbbccc'
(Pdb)