Python | Basic Program Crash Debugging
Last Updated :
12 Jun, 2019
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.
Code #1: Given the code
Python3 1==
# abc.py
def func(n):
return n + 10
func('Hello')
Code #2: Running python3 -i produces the following
Python3 1==
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 + 10
TypeError: Can't convert 'int' object to str implicitly
Python3 1==
Output :
20
A further step is to launch the Python debugger after a crash as shown in the code below.
Code #3 :
Python3 1==
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:
Python3 1==
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 :
Python3 1==
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:
Python3 1==
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.
Similar Reads
Debugging with ice cream in Python Do you often use Python print() to debug your code? However, if you want to make a significant improvement, you could use IceCream which would make debugging faster, cleaner, and easier to read. ic(), which is short for IceCream prints both expressions/variable names and their values. ic() is faster
7 min read
Debugging Python code using breakpoint() and pdb While developing an application or exploring some features of a language, one might need to debug the code anytime. Therefore, having an idea of debugging the code is quite necessary. Let's see some basics of debugging using the built-in breakpoint() function and pdb module. Python breakpoint() We
3 min read
How to Perform Debugging in Python PyCharm? Debugging is like finding and fixing mistakes in your computer code. PyCharm is a tool that helps with this, especially for Python code. It has special tools to make debugging easier. Whether you're new to programming or have been doing it for a while, getting good at debugging in PyCharm can make y
4 min read
Learn Python Basics âPython is a versatile, high-level programming language known for its readability and simplicity. Whether you're a beginner or an experienced developer, Python offers a wide range of functionalities that make it a popular choice in various domains such as web development, data science, artificial in
9 min read
Last Minute Notes (LMNs) - Python Programming Python is a widely-used programming language, celebrated for its simplicity, comprehensive features, and extensive library support. This "Last Minute Notes" article aims to offer a quick, concise overview of essential Python topics, including data types, operators, control flow statements, functions
15+ min read