Debuggen von Thread-Anwendungen

In diesem Kapitel erfahren Sie, wie Sie Thread-Anwendungen debuggen. Wir werden auch lernen, wie wichtig das Debuggen ist.

Was ist Debugging?

In der Computerprogrammierung ist das Debuggen der Prozess des Findens und Entfernens von Fehlern, Fehlern und Anomalien aus dem Computerprogramm. Dieser Prozess beginnt, sobald der Code geschrieben wurde, und wird in aufeinanderfolgenden Schritten fortgesetzt, da der Code mit anderen Programmiereinheiten kombiniert wird, um ein Softwareprodukt zu bilden. Das Debuggen ist Teil des Software-Testprozesses und ein wesentlicher Bestandteil des gesamten Lebenszyklus der Softwareentwicklung.

Python-Debugger

Der Python-Debugger oder der pdbist Teil der Python-Standardbibliothek. Es ist ein gutes Fallback-Tool zum Aufspüren schwer zu findender Fehler und ermöglicht es uns, fehlerhaften Code schnell und zuverlässig zu beheben. Folgendes sind die beiden wichtigsten Aufgaben derpdp Debugger -

  • Damit können wir die Werte von Variablen zur Laufzeit überprüfen.
  • Wir können den Code schrittweise durchlaufen und auch Haltepunkte setzen.

Wir können auf folgende zwei Arten mit pdb arbeiten:

  • Über die Kommandozeile; Dies wird auch als Postmortem-Debugging bezeichnet.
  • Durch interaktives Ausführen von pdb.

Arbeiten mit pdb

Für die Arbeit mit dem Python-Debugger müssen wir den folgenden Code an der Stelle verwenden, an der wir in den Debugger einbrechen möchten:

import pdb;
pdb.set_trace()

Beachten Sie die folgenden Befehle, um mit pdb über die Befehlszeile zu arbeiten.

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

Es folgt eine Demo des Befehls h (Hilfe) des Python-Debuggers -

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

Beispiel

Während der Arbeit mit dem Python-Debugger können wir den Haltepunkt an einer beliebigen Stelle im Skript mithilfe der folgenden Zeilen festlegen:

import pdb;
pdb.set_trace()

Nach dem Festlegen des Haltepunkts können wir das Skript normal ausführen. Das Skript wird bis zu einem bestimmten Punkt ausgeführt. bis wo eine Linie gesetzt wurde. Betrachten Sie das folgende Beispiel, in dem wir das Skript mithilfe der oben genannten Zeilen an verschiedenen Stellen im Skript ausführen.

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

Wenn das obige Skript ausgeführt wird, wird das Programm ausgeführt, bis a = "aaa". Dies können wir in der folgenden Ausgabe überprüfen.

Ausgabe

--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

Nach Verwendung des Befehls 'p (print)' in pdb druckt dieses Skript nur 'aaa'. Darauf folgt ein Fehler, da wir den Haltepunkt auf a = "aaa" gesetzt haben.

Ebenso können wir das Skript ausführen, indem wir die Haltepunkte ändern und den Unterschied in der Ausgabe sehen -

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

Ausgabe

--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

Im folgenden Skript setzen wir den Haltepunkt in der letzten Zeile des Programms -

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

Die Ausgabe ist wie folgt -

--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)