Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to debug a python script launched by a third party app

I'm using Linux Eclipse (pydev) as IDE to develop python scripts that are launched by an application written in C++. I can debug the python script without problems in the IDE, but the environment is not real (the C++ program sends and receives messages through the stdin/stdout and it's a complex communication channel that I can't fully reproduce writing the messages by hand).

Until now I was using log messages to debug (poor man's debug) but it's getting too complex. When I do something similar in PHP I can just leave xdebug listening and add breakpoints in Netbeans. Very neat and easy. Is it possible to do something like that in Python 3.X (with Eclipse or other IDE)?

NOTE: I know there is a Pydev / Attach to Process functionality, but it doesn't work. Always fails to attach.

NOTE2: There is also a built-in "breakpoint()" in Python 3.7 but it links to a debugger and if also fails, the IDE never gets the control.

like image 806
Ivan Avatar asked Nov 18 '20 18:11

Ivan


People also ask

How do I debug a Python web application?

If you click on the “Run and Debug” icon on the left hand side of the IDE or alternatively type Ctrl+Shift+D you will see the “RUN AND DEBUG” window. Now click on the “create a launch. json file” link and when prompted to “Select a debug configuration” choose “Python File Debug the currently active Python file”.

Can we debug Python code?

The module pdb defines an interactive source code debugger for Python programs. It supports setting (conditional) breakpoints and single stepping at the source line level, inspection of stack frames, source code listing, and evaluation of arbitrary Python code in the context of any stack frame.

How do you debug a Python program?

In Python, debugging is very easy. The Python debugger sets conditional breakpoints and debugs the source code one line at a time. We’ll debug our Python scripts using a pdb module that’s present in the Python standard library. To better debug a Python program, various techniques are available.

Which module is used to debug Python programs?

The pdb module is used to debug Python programs. Python programs use pdb interactive source code debugger to debug the programs. pdb sets breakpoints and inspects the stack frames, and lists the source code.

How do you debug your apps?

As you gain more knowledge, you start to use logging, trackback, pdb, ipdb or use code editors to help you in debugging your apps. This should be good enough most of the time.

How do you debug a crash in Python?

The pdb module is useful for debugging crashing programs that end abruptly. The module works by executing your code post-mortem (even after your program crashes). You can run a whole Python file or its unit using pdb. Once pdb starts, you can use it to check through each line of your code to see where the error lies.


Video Answer


2 Answers

After some research, this is the best option I have found. Without any other solution provided, I post it just in case anyone has the same problem.

Python has an integrated debugger: pdb. It works as a module and it doesn't allow to use it if you don't have the window control (i.e. you launch the script).

To solve this there are some coders that have created modules that add a layer on pdb. I have tried some and the most easy and still visual interesting is rpudb (but have a look also to this).

To install it:

pip3 install https://github.com/msbrogli/rpudb/archive/master.zip

(if you install it using the pip3 install rpudb command it will install an old version only valid for python 2)

Then, you use it just adding an import and a function call:

import rpudb
.....
rpudb.set_trace('127.0.0.1', 4444)
.....

Launch the program and it will stop in the set_trace call. To debug it (and continue) open a terminal and launch a telnet like this:

telnet 127.0.0.1 4444

You will have a visual debugger in front of you with the advantage that you can not only debug local programs, but also remote (just change the IP).

like image 109
Ivan Avatar answered Nov 06 '22 13:11

Ivan


I was able to attach PyCharm to a running python process and use break points using PyCharm attach to process

I created a bash script which exec a python script, should work the same with C++

like image 39
ofirule Avatar answered Nov 06 '22 13:11

ofirule