DRz
DRz

Reputation: 1156

Questions about compiling Python in debug mode

I am using Ubuntu 12.04, Python 2.7.3.
I am having a segmentation fault in a C extension I have co-written. It seems to come from a pointer that was not free'd properly.

I then use valgrind to find memory leaks. According to that answer, I have to compile Python in debug mode to get a valgrind friendly version of Python and get rid of its irrelevant reports.

How to compile Python in debug mode?

Even though the answer I linked answers part of that question, it does not provide me enough details.
Indeed, I want to understand what is happening, not just type things at some places because "who knows? It could work".

Hence, I would like to know:

I am also trying to find answers to the questions mentioned by Yair Daon's comment:

Upvotes: 4

Views: 3026

Answers (1)

DRz
DRz

Reputation: 1156

Here are some inputs for anyone trying to compile Python in debug mode on Ubuntu:

  1. Download the version you need from the python website.
  2. Untar it using tar -xf and go to the new directory.

    Example:
    tar -xf Python2.7.3.tgz cd Python-2.7.3

  3. Configure your python installer for debug mode, using ./configure --with-pydebug. It will create a Makefile that you will just have to run.

  4. Compile the sources to create your new python interpreter by running the Makefile, using: make install.

As you create a new interpreter, your system's Python will stay clean.

If you compiled it using --prefix=/home/username/workspace/project/python/, you can now run your script with your new Python interpreter using:

/home/username/workspace/project/python/bin/python script.py

Or, you can also add the shebang line #!/home/username/workspace/project/python/bin/python at the beginning of your script, give it the execute privilege (sudo chmod 764 script.py) and run it more easily using your new Python interpreter by typing ./script.py.

Note: you may want to check Python's documentation for more configuring / compiling flags (such as --prefix / -j, thanks Chris for the link).

Upvotes: 3

Related Questions