Python | Basic Program Crash Debugging
If the program is crashing with an exception, running the program as python3 -i can be a useful tool for simply looking around. The -i option starts an interactive shell as soon as a program terminates. From there, the environment can be explored.
# abc.py def func(n): return n + 10 func('Hello') |
Code #2: Running python3 -i produces the following
bash % python3 -i sample.py Traceback (most recent call last): File "sample.py", line 6, in <module> func('Hello') File "sample.py", line 4, in func return n + 10TypeError: Can't convert 'int' object to str implicitly |
func(10) |
Output :
20
A further step is to launch the Python debugger after a crash as shown in the code below.
Code #3 :
import pdb pdb.pm() |
Output :
> sample.py(4)func()
-> return n + 10
(Pdb) w
sample.py(6)()
-> func('Hello')
> sample.py(4)func()
-> return n + 10
(Pdb) print n
'Hello'
(Pdb) q
If the code is deeply buried in an environment where it is difficult to obtain an interactive shell (e.g., in a server), catch errors and produce tracebacks as shown in the code below.
Code #4:
import traceback import sys try: func(arg) except: print('**** AN ERROR OCCURRED ****') traceback.print_exc(file = sys.stderr) |
If the program isn’t crashing, but it’s producing wrong answers or working wrong, there is often nothing wrong with just injecting a few print() calls in places of interest. However, there are related techniques of interest. First, the traceback.print_stack() function will create a stack track of your program immediately at that point as shown in the code below.
Code #5 :
def sample(n): if n > 0: sample(n-1) else: traceback.print_stack(file = sys.stderr) sample(5) |
Output :
File "", line 1, in <module> File "", line 3, in sample File "", line 3, in sample File "", line 3, in sample File "", line 3, in sample File "", line 3, in sample File "", line 5, in sample
Alternatively, the debugger at any point in the program cab also be launched manually using pdb.set_trace() as –
Code #6:
import pdb def func(arg): ... pdb.set_trace() ... |
This can be a useful technique for poking around in the internals of a large program and answering questions about the control flow or arguments to functions.
Recommended Posts:
- Basic calculator program using Python
- Debugging Python code using breakpoint() and pdb
- Basic Operators in Python
- Basic Approximations in Python
- A basic Python Programming Challenge
- Python | Basic Gantt chart using Matplotlib
- Basic Slicing and Advanced Indexing in NumPy Python
- How to Create a Basic Project using MVT in Django ?
- Django Basic App Model - Makemigrations and Migrate
- Pandas | Basic of Time Series Manipulation
- Python program to convert POS to SOP
- Python program to add two matrices
- Python | How to time the program
- Python program to add two Matrices
- Output of Python program | Set 5
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



