So verwenden Sie pdb zum Debuggen von Python in einer Linux-Umgebung

小云云
Freigeben: 2018-03-30 16:20:49
Original
2834 Leute haben es durchsucht


pdb ist ein Paket, das mit Python geliefert wird. Es bietet eine interaktive Quellcode-Debugging-Funktion für Python-Programme. Zu seinen Hauptfunktionen gehören das Festlegen von Haltepunkten, das Debuggen von Einzelschritten, das Anzeigen des aktuellen Codes, das Anzeigen von Stapelfragmenten und dynamische Funktionen Ändern Sie den Wert einer Variablen usw. pdb bietet einige häufig verwendete Debugging-Befehle.

Beschreibung allgemeiner Befehle für pdb:

l #step Einzelschrittoperation, Kann die Funktion eingeben
p variable Haltepunkte
cl               #clear alle Haltepunkte löschen                                                                                                                          🎜>
Debug-Protokoll:
pdb set breakpoints können dem Programm hinzugefügt werden:
import pdb
Fügen Sie pdb.set_trace() hinzu, wo Haltepunkte gesetzt werden müssen
Führen Sie python -m pdb test.py aus

Im Folgenden wird anhand konkreter Beispiele beschrieben, wie Sie pdb zum Debuggen verwenden.


Listing 1. Testcode-Beispiel
import pdb
a = "aaa"
pdb.set_trace()
b = "bbb"
c = " ccc"
final = a + b + c
print final

Listing 2. Verwenden von pdb zum Debuggen
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?()
-> b = "bbb"
(Pdb) n
> ( )
-> c = "ccc"
(Pdb)
> /root/epdb1.py(6)?()
-> 🎜 > (Pdb) list
1 import pdb
2 a = "aaa"
3 pdb.set_trace()
4 b = "bbb"
5 c = "ccc"
6 -> final = a + b + c
7 print final
[EOF]
(Pdb)
[EOF]
(Pdb) n
> / epdb1.py(7)?()
-> print final
(Pdb)

Den Wert der Variablen drucken: Wenn Sie den Wert der Variablen während des Debuggens drucken müssen, Sie können p direkt über dem Variablennamen verwenden. Beachten Sie jedoch, dass beim Drucken der spezifische Wert erst angezeigt wird, nachdem die aktuelle Anweisung ausgeführt wurde. Andernfalls wird ein NameError: <-Fehler angezeigt gemeldet werden.

Listing 3. Drucken von Variablen während des Debug-Prozesses
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?( )
-> b = "bbb"
(Pdb) n
> /root/epdb1.py(5)?()
-> c = "ccc"
(Pdb) p b
'bbb'
(Pdb)
'bbb'
(Pdb) n
> /root/epdb1.py(6)?()
- > final = a + b + c
(Pdb) p c
'ccc'
(Pdb) p final
*** NameError: > (Pdb) n
> /root/epdb1.py(7)?()
-> print final
(Pdb) p final
'aaabbbccc'
(Pdb)

Verwenden Sie c, um das aktuelle Debug zu stoppen und die Ausführung des Programms fortzusetzen. Wenn im folgenden Programm weitere Anweisungen von set_statement() vorhanden sind, wechselt es erneut in den Debug-Status. Leser können die Überprüfung von set_trace() vor dem endgültigen Codedruck hinzufügen.


Listing 4. Beenden Sie das Debuggen und führen Sie das Programm weiter aus
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> (4 )?()
-> b = "bbb"
(Pdb) n
> /root/epdb1.py(5)?()
-> ccc"
(Pdb) c
aaabbbccc

Code anzeigen: Der aktuelle Codeblock wird beim Debuggen möglicherweise nicht gespeichert. Wenn Sie einen bestimmten Codeblock anzeigen möchten, können Sie ihn mit dem Befehl list oder l anzeigen. list verwendet den Pfeil ->, um auf die aktuelle Debug-Anweisung zu verweisen.

Listing 6. Während des Debug-Prozesses angezeigter Code
[root@rcc-pok-idg-2255 ~]# python epdb1.py
> /root/epdb1.py(4)?( )
-> b = "bbb"
(Pdb) list
1 import pdb
2 a = "aaa"
3 pdb.set_trace()
4 -> b = "bbb"
5 c = "ccc"
6 final = a + b + c
7 pdb.set_trace()
8 print final
[EOF]
( Pdb) c
> /root/epdb1.py(8)?()
-> print final
(Pdb) list
3 pdb.set_trace()
4 b = "bbb"
5 c = "ccc"
6 final = a + b + c
7 pdb.set_trace()
8 -> print final
[EOF]
(Pdb)


Debug bei der Verwendung von Funktionen


Listing 6. Beispiel für die Verwendung von Funktionen
import pdb
def combine(s1,s2 ): # define Unterroutine kombinieren, die...
s3 = s1 + s2 + s1 # s2 zwischen Kopien von s1 einklemmt, ...
s3 = '"' + s3 +'"' # schließt es in doppelte Anführungszeichen ein,. ..
return s3 # und gibt es zurück
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = Combine (a,b)
print final

Wenn Sie n direkt zum Debuggen verwenden, wird es als normale Zuweisung behandelt, wenn Sie die final=combine(a,b)-Anweisung erreichen Verarbeitung, geben Sie den Druck endgültig ein. Was ist, wenn Sie eine Funktion debuggen möchten? Sie können s direkt zum Aufrufen des Funktionsblocks verwenden. Das einstufige Debuggen in der Funktion ähnelt der obigen Einführung. Wenn Sie die Funktion nicht schrittweise durchlaufen möchten, können Sie direkt am Haltepunkt r drücken, um zum aufrufenden Ort zu gelangen.

清单 7. 对函数进行 debuggen
[root@rcc-pok-idg-2255 ~]# python epdb2.py 
 > /root/epdb2.py(10)?() 
 -> b = "bbb"
 (Pdb) n 
 > /root/epdb2.py(11)?() 
 -> c = "ccc"
 (Pdb) n 
 > /root/epdb2.py(12)?() 
 -> final = Combine(a,b) 
 (Pdb) s 
 --Call-- 
 > /root/epdb2.py(3)combine() 
 -> def combin(s1,s2):      # Subroutine Combine definieren, die... 
 (Pdb) n 
 > /root/epdb2.py(4)combine() 
 -> s3 = s1 + s2 + s1    # fügt s2 zwischen Kopien von s1 ein, ... 
 (Pdb) list 
  1     import pdb 
  2 
  3     def combin(s1,s2):      # Unterroutine definieren kombinieren, was... 
  4  ->     s3 = s1 + s2 + s1    # fügt s2 zwischen Kopien von s1 ein, ... 
  5         s3 = '"' + s3 +'"'   # schließt es in doppelte Anführungszeichen ein,... 
  6         return s3            # und gibt es zurück. 
  7 
  8     a = "aaa"
  9     pdb.set_trace() 
 10     b = "bbb"
 11     c = "ccc"
 (Pdb) n 
> /root/epdb2.py(5)combine() 
 -> s3 = '"' + s3 +'"'   # schließt es in doppelte Anführungszeichen ein,... 
 (Pdb) n 
 > /root/epdb2.py(6)combine() 
 -> return s3            # und gibt es zurück. 
 (Pdb) n 
 --Return-- 
 > /root/epdb2.py(6)combine()->'"aaabbbaaa"'
 -> return s3            # und gibt es zurück. 
 (Pdb) n 
 > /root/epdb2.py(13)?() 
 -> final drucken 
 (Pdb)


在调试的时候动态改变值如下实例.需要注意的是下面有个错误,原因是 b 已经被赋值了,如果想重新改变 b 的赋值,则应该使用!b。


清单 8. 在调试的时候动态改变值
[root@rcc-pok- idg-2255 ~]# python epdb2.py 

> /root/epdb2.py(10)?() 
 -> b = "bbb"
 (Pdb) var = "1234"
 (Pdb) b = "avfe"
 *** The specified object &#39;= "avfe"&#39; is not a function 
 or was not found along sys.path. 
 (Pdb) !b="afdfd"
 (Pdb)
Nach dem Login kopieren

相关推荐:

用Pdb库调试Python的方式及常用的命令

使用PDB模式调试Python程序介绍

使用PDB简单调试Python程序简明指南

Das obige ist der detaillierte Inhalt vonSo verwenden Sie pdb zum Debuggen von Python in einer Linux-Umgebung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage