I have solved remote debugging to my remote ubuntu server by doing the following:
On your remote server, run: pip install cython pydevd
IMPORTANT: Make sure that your computer is visible to server's IP by pinging your computer's IP
On your computer, configure a Python Remote Debug in run configurations.
Set Local Host Name: The IP of your computer. Yes, that computer with the pycharm installed.
Set the Port: 7999. Actually, any port will do as long as its above 1000.
Make sure to check the box, SINGLE INSTANCE ONLY
On File>Settings>Execution>Deployment, create an SFTP Server Connection.
Set the SFTP host to the server's IP. set the root path to the installation directory of your odoo server. In my case, its located at /opt/odoo
Set the username and password.
On the mappings tab,
Set the Local Path to your project's directory root
Set the deployment path to "\" or backslash.
Set the web path to "/" or forwardslash.
Test the SFTP connection.
On the server, open the file /opt/odoo/openerp-server (It's a python file without the extension)
Add these statements after the "import openerp"
pydevd.settrace('YOUR COMPUTER IP', port=7999, stdoutToServer=True,stderrToServer=True)
TODO EVERYTIME YOU MODIFY YOUR CODE AND DEBUG THAT
Now to start the debug, add a breakpoint in your code.
Run the remote debug to start listening from the server.
Restart the openerp instance you got running in your server. In my case, I force restart the init.d/odoo-server file:
If successful, pycharm will light up in the menu bar and ask you to set the path mappings. Just click the autodetect and press Save forever.
Notice that if you visit the odoo server website, it just won't load. Actually, pycharm sets a "virtual" breakpoint after the settrace command you have provided so you have to press the play button thing at the debug(or F8)
Viola! Now it works and any breakpoint you set will stop odoo from executing and let you analyze everything.
Test it by adding a breakpoint in your code and try to run that code. Try the @api.onchange ones since they are more predictable to run.