Skip to content
Related Articles

Related Articles

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




# 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 + 10
TypeError: 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.

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning – Basic Level Course

My Personal Notes arrow_drop_up
Recommended Articles
Page :