debugging - pai-plznw4me/django-initializer GitHub Wiki

Django debugging

디버깅은 맀우 μ€‘μš”ν•˜λ‹€. μ΄μœ λŠ” μ—λŸ¬ λ°œμƒμ‹œ κ²½ν—˜κ³Ό 직관에 μ˜μ‘΄ν•˜μ§€ μ•Šκ³  μ—λŸ¬κ°€ λ°œμƒν•œ 원인을 λ³€μˆ˜ 속성 λ˜λŠ” λ‘œμ§μ„ ν•˜λ‚˜ν•˜λ‚˜ νŒŒμ•…ν•΄ κ°€λ©΄μ„œ μ •ν™•νžˆ νŒŒμ•…ν• μˆ˜ 있기 λ•Œλ¬Έμ΄λ‹€. ν•΄λ‹Ή ν¬μŠ€νŠΈμ—μ„œλŠ” μ–΄λ–»κ²Œ django μ—μ„œ 디버깅을 ν•˜λŠ”μ§€ μ„€λͺ…ν•œλ‹€.

1. Pycharm

file app 에 views.py 을 μ‹€ν–‰ν•œλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

def index(request):
	files = File.objects.all()  
  return HttpResponse(200)

μœ„μ—μ„œ μ •μ˜ν•œ filesλ³€μˆ˜μ— μžˆλŠ” 정보λ₯Ό 디버깅을 톡해 μ•Œκ³  μ‹Άλ‹€κ³  ν•˜μž.

μ•„λž˜ 3κ°€μ§€ 방식을 톡해 디버깅을 ν•  수 μžˆλ‹€.

  • μ„œλ²„ λ―Έμ‹€ν–‰ 디버깅

  • μ„œλ²„ μ‹€ν–‰ λ™μ•ˆ 디버깅

  • ν…ŒμŠ€νŠΈλ₯Ό ν™œμš©ν•œ 디버깅

1.1 μ„œλ²„ λ―Έμ‹€ν–‰ 디버깅

  • 일반 shell μ—μ„œλŠ” django db 및 django library 에 접근이 λΆˆκ°€λŠ₯ν•˜λ‹€. μ ‘κ·Ό μ‹œ django.core.exceptions.ImproperlyConfigured ν•΄λ‹Ή μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. μ ‘κ·Ό ν•˜κ³  μ‹Άλ‹€λ©΄ μ•„λž˜ μ‰˜μ„ μ‹€ν–‰ν•΄μ•Όν•œλ‹€.
python manage.py shell
  • ν•΄λ‹Ή μ‰˜μ— 접속해 python μ½”λ“œλ₯Ό μž…λ ₯ν•˜λŠ”κ²ƒμ΄ μ•„λ‹ˆλΌ λ°”λ‘œ python μ½”λ“œλ₯Ό μž…λ ₯ν•˜κ³ μž ν•œλ‹€λ©΄ μ•„λž˜ μ˜΅μ…˜μ„ μ£Όλ©΄ λœλ‹€.
python manage.py shell -c "print("helloworld")"
  • μœ„ 지식을 μ‘μš©ν•˜λ©΄ 디버깅을 효율적으둜 ν•  수 μžˆλ‹€.

views.py λ‚΄ index() 을 μ‹€ν–‰ν•œλ‹€κ³  κ°€μ •ν•΄λ³΄μž. (λŒ€λΆ€λΆ„μ˜ μ‹€ν–‰ μ½”λ“œλŠ” views.py 에 μ •μ˜λ˜μ–΄ μžˆλ‹€.)

Step1.

main() 에 μ‹€ν–‰ν•˜κ³ μž ν•˜λŠ” ν•¨μˆ˜ λ“±λ‘ν•˜κΈ°

...
if __name__ == '__main__':
    index() # <-- μ‹€ν–‰ν•˜κ³ μž ν•˜λŠ” ν•¨μˆ˜

Step 2. Pycharm Config

  • pycharm μ„€μ •ν•˜κΈ°

α„€α…³α„…α…΅α†·

  • ν•΄λ‹Ή λ””λ²„κ·Έμ˜ 단점은 λΈŒλΌμš°μ Έμ—μ„œ μ œκ³΅ν•˜λŠ” request 을 확인 ν•  수 μ—†λ‹€λŠ” 점이 μžˆλ‹€.
  • κ°„λ‹¨ν•˜κ²Œ pilot test 을 λ””λ²„κΉ…μ‹œ μ‚¬μš©ν•˜λ©΄ μ’‹λ‹€

1.2 server debugging

  • μ‹€μ œλ‘œ μ„œλ²„λ₯Ό μ‹€ν–‰ν•˜μ—¬ λ””λ²„κΉ…ν•œλ‹€.
  • url 에 request 을 보낸닀. μž‘λ™ν•˜λŠ” ν•¨μˆ˜μ— breakpoint κ°€ κ±Έλ €μžˆλ‹€λ©΄ debugging 이 λ˜λŠ”κ±Έ 확인 ν•  수 μžˆλ‹€.

server-debugging