Mikey
June 11, 2020
The python agent for nerd.vision has left early access, version 1.0.0 is officially released!
In this blog, we are going to guide you through setting up and using nerd.vision with your python application.
The application we will be using is the same Nerdulator app we saw in the Getting started with Node.js blog but with a Python REST endpoint.
The python app uses tornado and contains a known issue where subtractions return the wrong result.
This blog will be split into 3 parts;
Installing the python agent requires you to do two things;
This process should only take a few minuites. You can view the video on Installing the Python agent here.
The nerd.vision agent will have no performance impact on the application, so you can leave it installed and be ready to debug your application at any time.
To install the nerd.vision agent run:
pip install nerdvision
Depending on your configuration of PIP, you may need to run this command within the directory of your Python application.
The agent should be initialized as soon as the application starts. For this reason we recommend placing the required code directly under the import statements of the process launch class.
The code required is as follows:
import nerdvision
nerdvision.start('YOUR_API_KEY')
The first line imports the package from your local PIP repository, the second runs nerd.vision when the application starts.
You can specify configuration options in the start command by placing an object in the start function, rather than just the API key.
An example of this would be:
nerdvision.start(
api_key='YOUR_API_KEY',
name="PythonDemo",
tags={
'environment':'production',
'app':'pythonApp'
}
)
You can set a defined list of tags for your client. This could be tags such as “environment=production”. A tag is made of a key-value pair and can be any combination of key/value you like.
These tags can be used to dictate if a breakpoint is fired on a particular client.
You can find the full list of configuration options for the python client here.
When you run the Python application after installing nerd.vision, you will see the following block of code in the terminal or log of the application:
In this example we will be debugging the code that was checked out from GitLab and modified locally. For this we will debug using the Local File System workspace, where the code of the application is uploaded from the source directory to the browser.
Nerd.vision does not store or process any of your code in our systems as we value your privacy.
To create your workspace, click 'Create New Workspace'
In the create workspace modal, you can then browse for your project folder and click upload
As an additional step, we will then expand additional options and filer on the tag APP = "PYTHONAPP" as shown in the Client tagging section above
Hitting save will create the workspace.
To debug an issue we need to first hit a breakpoint, we can then trigger the code in our app to fire the breakpoint.
In this example we will be debugging a known issue where a subtraction returns an incorrect result.
Using the source code viewer you can expand the file trees in your application to view your application files, you can also search for the specific file you require.
When you select a file (in our case nerdulator.py) the file loads in the code viewer. In our case we want to set a breakpoint on the return of our subtraction function, to do this we will left click on the margin of line 40 to set a breakpoint.
To trigger a breakpoint, we will perform a subtraction in our nerdulator application
When we run the subtraction code, a breakpoint will fire in nerd.vision.
When a breakpoint fires in nerd.vision a snapshot of the debugging data is created. This snapshot contains the full call stack and variables for each frame in the stack.
In our case we can see our integer variables and result variable in the top frame of the stack.
If we compare these variables to the code of the subtract function, we can see int1 and int 2 are set correctly, but the result object is incorrect.
In the code we can see that result is equal to int2 - int1 which would explain why the result variable is not correct, the values int1 and int2 should be reversed.
Our example of debugging an issue looked into a very basic issue, but the process for debugging a more complex issue is the same.
Setting up and debugging an issue in Python using nerd.vision is a very quick process. Setting up the python agent and worksapce only takes a few minutes and gives you the ability to debug any environment at a moments notice.
Technical Support Engineer and Developer advocate for nerd.vision and other software projects. Background in object-oriented software development and data analysis. Personal hobbies include simulation gaming and watch collecting.