그냥 아무데서나 아래 코드를 삽입하고 실행시키면 거기서 멈춤니다.
import pdb; pdb.set_trace()
h
를 입력하고 엔터를 치면, 다음과 같이 사용가능한 명령어의 모음을 보여줍니다.
(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
이 상태에서 확인하고자 하는 변수를 치면, 해당 변수가 어떤 값을 가지고 있는지 보여줍니다.
(Pdb) node.next.data
1
l
은 현재 내가 어디있는지 위아래 코드를 보여줍니다. l명령어에 출력할 시작 라인넘버와 끝 라인넘버를 인자로 주면 원하는 부분의 코드를 출력합니다.
(Pdb) l
19 node.next = Node(data)
20
21 def delete(self, data):
22 node = self.head
23 import pdb; pdb.set_trace()
24 -> while node.next is not None:
25 if node.next.data == data:
26 node.next = node.next.next
27 break
28
29 node = node.next
n
명령어로 다음라인을 실행할수 있습니다.
(Pdb) n
> /Users/slim/test/python/linkedlist.py(25)delete()
-> if node.next.data == data:
s
명령어도 마찬가지로 하나의 라인을 실행하는데, 얘는 현재 라인을 실행합니다.
(Pdb) s
> /Users/slim/test/python/linkedlist.py(29)delete()
-> node = node.next
unt
명령어를 이용하면 코드의 라인넘버를 지정하여 원하는 코드까지 실행을 할수 있습니다. 일단 l
명령어를 이용해서 이동하고자 하는 라인넘버를 확인한후, unt
명령어에 25라는 숫자를 인자로 넘기면, 해당 25번째 코드까지 실행을 합니다.
(Pdb) l
19 node.next = Node(data)
20
21 def delete(self, data):
22 node = self.head
23 import pdb; pdb.set_trace()
24 -> while node.next is not None:
25 if node.next.data == data:
26 node.next = node.next.next
27 break
28
29 node = node.next
(Pdb) unt 25
> /Users/slim/test/python/linkedlist.py(25)delete()
-> if node.next.data == data:
(Pdb) l
20
21 def delete(self, data):
22 node = self.head
23 import pdb; pdb.set_trace()
24 while node.next is not None:
25 -> if node.next.data == data:
26 node.next = node.next.next
27 break
28
29 node = node.next
b
명령어를 이용해서 break point를 지정하실수 있습니다. l
명령어를 이용해서 break point로 지정할 라인을 확인하고, b
명령어에 라인넘버를 인자로 넘겨서 break point를 지정합니다.
(Pdb) l
20
21 def delete(self, data):
22 node = self.head
23 import pdb; pdb.set_trace()
24 while node.next is not None:
25 -> if node.next.data == data:
26 node.next = node.next.next
27 break
28
29 node = node.next
30
(Pdb) b 29
Breakpoint 1 at /Users/slim/test/python/linkedlist.py:29
c
명령어를 이용해서 지정된 break point까지 실행합니다. l
을 통해 확인을 해보면 30번째 라인까지 실행하고 while문을 통해 다시 올라가서 while문 첫번째 라인에서 다음 실행을 대기하고 있습니다.
(Pdb) c
> /Users/slim/test/python/linkedlist.py(24)delete()
-> while node.next is not None:
(Pdb) l
19 node.next = Node(data)
20
21 def delete(self, data):
22 node = self.head
23 import pdb; pdb.set_trace()
24 -> while node.next is not None:
25 if node.next.data == data:
26 node.next = node.next.next
27 break
28
29 node = node.next
이때, r
을 입력하면, 현재 function 에서 return하는 부분까지 실행합니다.
(Pdb) r
--Return--
> /Users/slim/test/python/linkedlist.py(27)delete()->None
-> break
a
명령어는 현재 함수를 실행하면서 받은 모든 인자를 출력합니다.
(Pdb) a
self = <__main__.LinkedList object at 0x10a4eb470>
data = 3
q
를 입력하면, 디버깅을 종료합니다.
(Pdb) q
Traceback (most recent call last):
File "linkedlist.py", line 44, in <module>
ll.delete(2)
File "linkedlist.py", line 24, in delete
while node.next is not None:
File "linkedlist.py", line 24, in delete
while node.next is not None:
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/bdb.py", line 88, in trace_dispatch
return self.dispatch_line(frame)
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/bdb.py", line 113, in dispatch_line
if self.quitting: raise BdbQuit
bdb.BdbQuit
#pythondegugging #debug #debugging #파이썬디버깅