[컴] IntelliJ IDE 에서 python plugin 을 이용한 python remote debugging

remote debugging / python remote debugging intellij / pycharm remote debugging
IntelliJ IDEA 14.1.6 에서 Python remote Debug / 장고 원격 디버깅 / django remote debugging using IntelliJ IDEA


참고로 IntelliJ IDEA 15.0 에서는 제대로 동작하지 않았다.

원격 디버깅

여기서는 remote machine 의 server 를 local 에서 원격으로 debugging 을 해 보려 한다. ref. 1 의 내용이 정리가 잘되어 있어서 글의 구성은 ref. 1을 따른다.

local(debug server) <-----> remote machine

local(debug server) 설정

IntelliJ IDEA 14.1.6 에서 Python remote Debug 설정

  1. Run 
  2. > Edit Configuration 
  3. > '+' 기호 
  4. > Python Remote Debug
  5. > Local host name 적기(외부에서 접근할 주소)
  6. > Port 입력
  7. > OK
  8. > remote-debug 를 실행


아래 화면이 나오면 된다.



path mapping

site-package 의 위치를 맞춰주고, Lib 의 위치를 맞춰주고,
django source 의 root 위치를 맞춰주자. 필자의 경우는 아래와 같이 설정해 줬다.
<local --> remote>
D:/mine/programming/python/my/django_project_root --> /home/user1/django_project_root
d:/envs/my_virtual/Lib              --> /home/user1/my_virtual/lib/python2.7/


맞지 않으면 아래 같은 error 가 나올 것이다.
pydev debugger: warning: trying to add breakpoint to file that does not exist: /home/myuser/app/beluga/d:/envs/myproject/lib/site-packages/django/views/generic/base.py (will have no effect)




Remote machine 설정

break point 설정 : remote machine 에 있는 소스

configuration 에 있는 코드 2개(화면)를 remote server 에 있는 django 의 source 에 copy 해 놓으면, 그 지점에서 local debugger server 로 신호를 주고, interrupt 가 걸린다.(break point 를 설정한 곳에 도달했을 때 모습이 된다.)

되도록 local 에 있는 소스와 remote 에 있는 source 의 line 이 달라지지 않게 하기 위해 아래처럼 한줄로 입력 하는 것이 좋다.  remote machine 의 소스에서 break point 를 주고 싶은 곳에 아래 code 를 넣으면 된다.
import sys;sys.path.append('/home/myapps/app/debug/pycharm-debug.egg');import pydevd;pydevd.settrace('124.49.91.247', port=10101, stdoutToServer=True, stderrToServer=True)

참고로, 시점은 불분명하고, 위의 code 가 실행된다며, 그 후에는 local(debugger server) 에서 그냥 breakpoint 를 사용하면 된다.


manage.py

ref. 1 에서는 아래처럼 manage.py 끝에 넣었는데,
  • manage.py runserver
를 하고 나서 ctrl+c 를 해서 멈출 때 debugger 에 걸리게 된다.


#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "beluga.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

    sys.path.append('/home/myapps/app/debug/pycharm-debug.egg')
    import pydevd
    pydevd.settrace('124.49.91.247', port=10101, stdoutToServer=True, stderrToServer=True)



pycharm-debug.egg 를 remote machine 에 설치

pycharm-debug.egg 다운받기

내가 찾지 못한 부분도 있는데, plugin 으로 설치한 python 에 대한 pycharm-debug.egg 가 없어서 처음에는 PyCharm 의 것을 가져다 썼는데, 아래 repository 에서 plugin 파일을 download 하니 pycharm-debug.egg 가 들어있었다.


여기서 버전을 맞춰서 사용한다고 해도 아래와 같은 warning 은 계속 보였다.
Warning: wrong debugger version. Use pycharm-debugger.egg from PyCharm installation folder.

pycharm-debug.egg 를 설치하기

easy_install 을 사용해서 pycharm-debug.egg 를 설치하자. 만약 설치가 안되면 아래처럼 직접 경로를 넣어줘도 된다고 한다. [ref. 1] 필자도 설치하지 않고, settrace 를 호출할 때 마다 아래 코드를 같이 넣어줬다.(위의 break point 설정 확인)

import sys
sys.path.append('/home/john/app-dependancies/pycharm-debug.egg')




Reference

  1. python - How do I start up remote debugging with PyCharm? - Stack Overflow
  2. Remote Debugging



댓글 없음:

댓글 쓰기