Open main menu

CDOT Wiki β

Changes

Python Debugger

5,119 bytes added, 00:38, 3 November 2020
Online help on Debugger commands
sys.path; the .py suffix may be omitted.
(Pdb)
</source>
= Try it out: l, ll, b, n, s =
== The list command: l or list ==
We will first use 'l' to list Python code around the current Python statement to be executed:
<source>
(Pdb) l
1 #!/usr/bin/env python3
2 -> ''' template for ops435 assignment 1 script
3 put your script level docstring here...
4 you can have more than one line of docstring.
5 Please personlize the following author declaration:
6 -----------------------------------------------------------------------
7 OPS435 Assignment 1 - Fall 2020
8 Program: a1_[Seneca_name].py (replace [Seneca_name] with your Seneca User name)
9 Author: "Student Name"
10 The python code in this file (a1_[Seneca_name].py) is original work written by
11 "Student Name". No code in this file is copied from any other source
</source>
== the longlist command: ll or longlist ==
We can list all the Python statements in the current file with 'll' or 'longlist' command:
<source>
(Pdb) ll
1 #!/usr/bin/env python3
2 -> ''' template for ops435 assignment 1 script
3 put your script level docstring here...
4 you can have more than one line of docstring.
5 Please personlize the following author declaration:
6 -----------------------------------------------------------------------
7 OPS435 Assignment 1 - Fall 2020
8 Program: a1_[Seneca_name].py (replace [Seneca_name] with your Seneca User name)
9 Author: "Student Name"
10 The python code in this file (a1_[Seneca_name].py) is original work written by
11 "Student Name". No code in this file is copied from any other source
12 except those provided by the course instructor, including any person,
13 textbook, or on-line resource. I have not shared this python script
14 with anyone or anything except for submission for grading.
15 I understand that the Academic Honesty Policy will be enforced and
16 violators will be reported and appropriate action will be taken.
17 '''
18 import os
19 import sys
20
21 def leap_year(obj):
22 '''
23 put your function level docstring here ...
24 '''
25 ...
26
27 return status
28
29 def sanitize(obj1,obj2):
30 '''
31 put your function level docstring here ...
32 '''
33 ...
34
35 return results
36
37 def size_check(obj, intobj):
38 '''
39 put your function level docstring here ..
40 '''
41 ...
42
43 return status
44
45 def range_check(obj1, obj2):
46 '''
47 put your function level docstring here ..
48 '''
49 ...
50
51 return status
52
53 def usage():
54 '''
55 put your function level docstring here ...
56 '''
57 ...
58 return status
59
60 if __name__ == "__main__":
61 # step 1
62 if len(sys.argv) != 2:
63 print(usage())
64 sys.exit()
65 # step 2
66 B month_name = ['Jan','Feb','Mar','Apr','May','Jun',
67 'Jul','Aug','Sep','Oct','Nov','Dec']
68 days_in_month = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30,
69 7:31, 8:31, 9:30, 10:31, 11:30, 12:31}
70 user_raw_data = sys.argv[1]
71 # step 3
72 allow_chars = '0123456789'
73 dob = sanitize(user_raw_data, allow_chars)
74 print('Sanitized user data:', dob)
75 # setp 4
76 result = size_check(dob,8)
77 if result == False:
78 print("Error 09: wrong data entered")
79 sys.exit()
80 # step 5
81 year = int(dob[0:4])
82 month = int(dob[4:6])
83 day = int(dob[6:])
84 # step 6
85 result = range_check(year,(1900,9999))
86 if result == False:
87 print("Error 10: year out of range, must be 1900 or later")
88 sys.exit()
89 result = range_check(month,(1,12))
90 if result == False:
91 print("Error 02: Wrong month entered")
92 sys.exit()
93 result = leap_year(year)
94 if result == True:
95 days_in_month[2] = 29
96 result = range_check(day, (1, days_in_month[month]))
97 if result == False:
98 print("Error 03: wrong day entered")
99 sys.exit()
100 # step 7
101 new_dob = str(month_name[month - 1])+' '+ str(day)+', '+str(year)
102 # step 8
103 print("Your date of birth is:", new_dob)
(Pdb)
</source>
== set the break point with 'b' or 'break' ==
Next, let set a break points at line 66 and 72:
<source>
(Pdb) b 66
Breakpoint 1 at /home/rchan/Desktop/ops435/2020-03/a1/ops435-a1/a1_template.py:66
(Pdb) b 72
Breakpoint 2 at /home/rchan/Desktop/ops435/2020-03/a1/ops435-a1/a1_template.py:72
</source>
At anytime, you can display all the break points and their status with just the 'b' or 'break' command:
<source>
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at /home/rchan/Desktop/ops435/2020-03/a1/ops435-a1/a1_template.py:66
2 breakpoint keep yes at /home/rchan/Desktop/ops435/2020-03/a1/ops435-a1/a1_template.py:72
</source>
1,760
edits