ä»æ¥ãããã°ã©ã ã®ãããã°æ¹æ³ãæ€èšããããšãææ¡ããŸãã
- å°å ¥ãšçè« -ãªããããã¡ã€ãªã³ã°ãç°ãªãã¢ãããŒããããŒã«ãããã³ãããã®éããå¿ èŠãªã®ã§ããïŒ
- æåããã³çµ±èšãããã¡ã€ãªã³ã° -å®è·µã«ç§»ããŸããã
- ã€ãã³ããããã¡ã€ãªã³ã° -ããŒã«ãšãã®ã¢ââããªã±ãŒã·ã§ã³
- ãããã° -äœãæ©èœããªãå Žåã®å¯ŸåŠæ¹æ³
ãããã°ã«é¢ããäŒè©±ãå§ããåã«ããããäœã§ãããã決å®ããå¿ èŠããããŸãã äŒçµ±çã«ã ãŠã£ãããã£ã¢ã«ç®ãåããŸãïŒããããã°-ãšã©ãŒã®æ€åºãããŒã«ã©ã€ãºãããã³é€å»ãã äžè¬ã«ãããã°ã©ã ã®ãããã°ãæåãããã«ã¯ã2ã€ã®ããšãå¿ èŠã§ãïŒãã ããåžžã«ååã§ã¯ãããŸããïŒïŒãšã©ãŒãçºçããããã°ã©ã ã®å Žæã®å€æ°ã®å€ãããã³ã¹ã¿ãã¯ãã¬ãŒã¹ïŒé¢æ°åŒã³åºãã®é åºããšã©ãŒãŸã§ ãŸããããã°ã©ã ãå®è¡ãããŠããç°å¢ã«ã€ããŠç¥ãããšã圹ç«ã¡ãŸãïŒç©ºãã¡ã¢ãªã®æç¡ïŒã·ã¹ãã ã®å¶éïŒãã¡ã€ã«èšè¿°åã®æ°ãªã©ïŒãªã©ïŒã§ãããããã¯èšäºã®ç¯å²ããããã«è¶ ããŠããŸãã
ãžã£ã³ã«ã®å€å ž
åå¿è ããã°ã©ããŒãããã°ã©ã å ã§ãååŸãããå€æ°ã®å 容ïŒé©åãªå ŽæïŒãšããã°ã©ã ã®ããžãã¯ïŒé¢æ°åŒã³åºããæ¡ä»¶ïŒã調ã¹ããå ŽåãäœãããŸããïŒ æãåºããæãåçŽã§ãæãå¹ççãªãããã°æ¹æ³ã䜿çšããŸããã³ãŒãå šäœã«ãå°å·ããé 眮ããŸãïŒPython 2.xã®printã¹ããŒãã¡ã³ããšPython 3.xã®printïŒïŒé¢æ°ïŒã ããããåå¿è ããããç¯ãã ãã§ãªããé«åºŠãªéçºè ã¯ãããã°ã«ç¹å¥ãªããŒã«ã䜿çšããŠæ°åã§çŽ æ©ããšã©ãŒã®åå ãèŠã€ããŠãã¹ãŠãä¿®æ£ãããšã©ãŒã®æ€çŽ¢ãæ°æéãŸãã¯æ°æ¥ã«ãåã¶ããšã«æ°ä»ããªãã®ãé¢åã§ãã ãšããã§ããã®ã¢ãããŒãã¯ããžã£ãŒããªã³ã°ããšåŒã°ããŸãã
ããã«ã¯ãããã°ã©ã ã®ãããã°ã«å¿ èŠãªãã¹ãŠã®æ å ±ããã°ãã¡ã€ã«ã«èšé²ããããšãå«ãŸããŸãã ã¹ã¯ãªãããå®çšŒåã§åäœãããšã©ãŒãæ£çºçã«çºçããå Žåããããã°ã©ã ã®é·æéã®äœæ¥åŸã«ã®ã¿ãšã©ãŒãçºçããå ŽåïŒèµ·ååŸ2ã3é±éãªã©ïŒãä»ã®ãªãã·ã§ã³ããªãå ŽåããããŸãã
ããããç§ãã¡ã¯Pythonã§æžããŠããã®ã§ãçµã¿èŸŒã¿ã®ãããã°ããŒã«ãã³ãã¥ããã£ãæäŸããããŒã«ã䜿çšããŠã¿ãŸãããïŒ ããšãã°ãéåžžã®ãã¡ã€ã«ãžã®ãã°ã®ä»£ããã«ã Sentryã䜿çšããã®ãçã«ããªã£ãŠããŸãããã®ããããšã©ãŒã¡ãã»ãŒãžã«å ããŠãè¿œå æ å ±ãéä¿¡ã§ããŸãã
Pythonãããã¬ãŒ
Pythonã«ã¯ãããã¬ãçµã¿èŸŒãŸããŠããŸãïŒ pdbã¢ãžã¥ãŒã«ã ååãšããŠãããã«ããèšäºãçµäºããå¯èœæ§ããããŸãã pdbã¯éåžžã«åŒ·åãªãããã¬ã§ãããä»ã®ãã¹ãŠã¯å®éã«ã¯åãªããè£ é£Ÿãã§ãã ããããæã ã¯ç¶ããŸã=ïŒ
ååãããããããã«ãpdbã¯gdbïŒGNU Projectãããã¬ãŒïŒ-CïŒã ãã§ãªãïŒããã°ã©ã ãããã¬ãŒããå€ããåããŸããã ã¡ãªã¿ã«ãPythonããã°ã©ã ã¯gdbã§ãããã°ã§ããŸãããå°ãè€éã§é·ããªããŸãããèšèªã®ããã€ã¹ã詳ãã調ã¹ãã人ããPythonã®ã·ã¹ãã ã¢ãžã¥ãŒã«ãäœæãã人ã«ãšã£ãŠãgdbã¯ãããªãã§ã¯ã§ããŸããã ããã«ãgdbã䜿çšãããšãæ¢ã«å®è¡äžã®ããã°ã©ã ã«ïŒpidãä»ããŠïŒæ¥ç¶ããããã®å Žã§ããããã°ãå®è¡ã§ããŸãã
ããã§ã¯pdbã®è©³çŽ°ã«ã€ããŠã¯èª¬æããŸãããDougHellmannã«ããçŽ æŽãããèšäºããããŸã ã
ipython pdb
ããã«IPythonãšipdbã¢ãžã¥ãŒã«ãé 眮ããããšããå§ãããŸãã
â pip install ipython ipdb
IPythonïŒããã³ãã®äžéšãšããŠã®ipdbïŒã¯ããããè¯ããã³ã³ãœãŒã«ãæäŸãããã®çµæãããã°ã©ã ã®ãããã°ããã䟿å©ã«ãªããŸããã³ãŒãã®åŒ·èª¿è¡šç€ºãèªåè£å®ãã³ãã³ãå±¥æŽããªããžã§ã¯ãã®åçã€ã³ããã¹ãã¯ã·ã§ã³ãããžãã¯é¢æ°ããšã€ãªã¢ã¹ãªã©ã§ãã æ¹åç¹ã®å®å šãªãªã¹ãã¯ãããã¥ã¡ã³ãã«ãããããïŒããšå ¥åããŠIPythonã³ã³ãœãŒã«ããçŽæ¥èŠã€ããããšãã§ããŸãã ããŒã ãšããŠã ããã¯ãã¹ãŠãããã°ã«åœ¹ç«ã¡ãã·ã³ãã«ã§æ¥œãããã®ã«ãªããŸãã
ipdbã§ã¹ã¯ãªãããããã°ãå®è¡ããã«ã¯ãããã€ãã®æ¹æ³ããããŸãã
â python -m ipdb script.py
â ipdb script.py
ãããã®ã³ãã³ãã¯ããããã¬ãŒã§ããã°ã©ã ãéãã奜ããªããšãè¡ãããšãã§ããŸãïŒãã¬ãŒã¯ãã€ã³ãã®èšå®ãæäœã®ã¹ãããããšã®èª¿æ»ããŸãã¯ããã°ã©ã ã®å®è¡-ãã£ãããããªãäŸå€ãçºçãããšããããã¬ãŒã¯èªåçã«åæ¢ããŸãã
ããããéåžžããã®ãªãã·ã§ã³ã¯äœ¿ãããã§ããããããã¹ãŠã®ã次ãããã¹ããããã§æ£ããå Žæã«çããæã§äŒæ©ãã€ã³ãïŒãäŒæ©ãïŒãå ¥ããã®ã¯æ¯åç²ããŸãã ããã°ã©ã ã®é©åãªå Žæã«æ¬¡ã®è¡ãæ¿å ¥ããæ¹ãã¯ããã«äŸ¿å©ã§ãã
import ipdb; ipdb.set_trace()
ãããŠããã®è¡ãå®è¡ããããšãããã°ã©ã ã¯äžæåæ¢ãããããã¬ãŒãèµ·åããŸãããã®åŸãããã°ã©ã ã®è©³çŽ°ãªèª¿æ»ãéå§ã§ããŸãã æ¬è³ªçã«ãset_traceé¢æ°ã¯ãã¬ãŒã¯ãã€ã³ãã®èšå®ã§ãã
麻é
ã«é¢ãã泚æ
ãã®æç¹ã§ç¥èªPEP8ã«ç²ŸéããŠãã人ãªã誰ã§ããã»ãã³ãã³ã§åºåãããåãè¡ã§2ã€ã®ã³ãã³ãã䜿çšãããšéé£ããããšãã§ããŸããããã®ã¢ãããŒãã«ã¯çåœæš©ããããŸãã ãŸããããã¯ãªããžããªã«æ±ºããŠã³ããããããªãäžæçãªã³ãŒãã§ãïŒããã¯ãã³ãããããŠããã·ã¥ããåã«PEP8æºæ ã®ã³ãŒãããã§ãã¯ããç¹å¥ãªããã¯ã«ãã£ãŠåŠçãããããã¹ããšãã£ã¿ãŒã§ã³ãŒããèªåãã§ãã¯ããŸãïŒã 次ã«ããã®è¡ãã³ãŒãã«æ¿å
¥ããã³åé€ããæ¹ãç°¡åã§ãã ãããŠç¬¬äžã«ãPEP8ã«æžãããŠããããã«ããæããªäžè²«æ§ã¯ãå°ããªå¿ã®ãããŽããªã³ã§ããã
Python Debuggerã«ã¯å¥ã®æäœã¢ãŒãããããset_traceé¢æ°ããã䟿å©ãªå ŽåããããŸãã ãäºåŸåæããšåŒã°ããŸããæå®ããããã¬ãŒã¹ããã¯ã䜿çšããŠãããã¬ãŒãèµ·åããŸãã
try: some_code() except: import sys import ipdb tb = sys.exc_info()[2] ipdb.post_mortem(tb)
ãŸãã¯ïŒ
import sys import ipdb def run_debugger(type, value, tb): ipdb.pm() sys.excepthook = run_debugger some_code()
ãsome_codeãé¢æ°ã§ãã£ãããããªãã£ãäŸå€ãããå Žåããããã¬ãŒã¯äŸå€ãçºçããããã°ã©ã ã®å Žæã§åŒã³åºãããŸãã
ãããã°
set_traceé¢æ°ã®èå³æ·±ã代æ¿ç©ã¯ã ipdbãã€ã³ããŒãããŠã©ã€ãã©ãªïŒdiré¢æ°ã®äŸ¿å©ãªä»£æ¿æ段ïŒãåç §ãããããã°ãéå§ããã ãã®ãããã°ã¢ãžã¥ãŒã«ã§ãã ã¢ãžã¥ãŒã«ã®å¯äžã®å©ç¹ã¯äœ¿ããããã§ãããã°ã©ã ã®ã©ããã«è¡ãæ¿å ¥ããã ãã§ãã
import debug
ãã®è¡ãå®è¡ããããšãipdbãããã¬ãŒãåŒã³åºãããseeã¢ãžã¥ãŒã«ãã€ã³ããŒããããŸãã
ipdbplugin
å¥ã®èå³æ·±ããä»åã¯äŸ¿å©ãªã©ã€ãã©ãªãŒïŒ nose-ipdb ã ãã®å©ããåããŠããšã©ãŒïŒäŸå€ïŒã䜿çšããŠãããã¬ãŒãèªåçã«éå§ãããã誀ã£ãŠãã¹ãããããã¹ãïŒnosã䜿çšããããšãæã¿ãŸããïŒ ãšã©ãŒãçºçããå Žåã«ipdbãããã¬ãŒãèµ·åããã«ã¯ããã¹ãã®å®è¡æã«ããŒã--ipdbããè¿œå ããã ãã§ååã§ãã
â nosetests --ipdb
ãŸãã誀ã£ãŠå®äºãããã¹ãã§ãããã¬ãŒãèµ·åããã«ã¯ãããŒ--ipdb-failuresãè¿œå ããå¿ èŠããããŸãã
â nosetests --ipdb-failures
ãã¡ããããã¹ãŠãäžåºŠã«ãã£ããã§ããŸãã
â nosetests --ipdb --ipdb-failures
æ¯æ¥ãã®ã¢ãžã¥ãŒã«ã䜿çšããŠããŸããããããªãã®ç掻ã¯æ³åã§ããŸããã
ãŽã§ã«ã¯ãŒãŠã°
Flaskãã¬ãŒã ã¯ãŒã¯ã®äœæè ã§ãããäžè¬çã«æãã¯ãŒã«ãª Pythonããã°ã©ããŒã®1人ã§ããArmin Ronacherã«ããçŽ æŽããããããžã§ã¯ãã¯ã werkzeugãšåŒã°ããWSGIã¢ããªã±ãŒã·ã§ã³çšã®ããŸããŸãªãŠãŒãã£ãªãã£ã®ã³ã¬ã¯ã·ã§ã³ã§ãã ãã®ãã¡ã®1ã€ã¯ã䟿å©ãªãã¬ãŒã¹ããã¯ãšã©ãŒã衚瀺ãããã©ãŠã¶ãŒããŒãžã®ãã¬ãŒã¹ããã¯ã®é©åãªå Žæã§çŽæ¥Pythonã³ã³ãœãŒã«ãèµ·åã§ããã¯ãŒã«ãªãããã¬ãŒã§ãã

䜿çšæ¹æ³ã¯éåžžã«ç°¡åã§ãé©åãªããã«ãŠã§ã¢ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãã©ããããã ãã§ãã
from werkzeug.debug import DebuggedApplication from myapp import app app = DebuggedApplication(app, evalex=True)
圌ãã¯ãwerkzeugã¯Ajaxãªã¯ãšã¹ãããããã°ããããšããã§ãããšèšã£ãŠããŸãããæ®å¿µãªããšã«ãç§ã¯å人çã«ãããè¡ã£ãããšã¯ãããŸããã ãã®ä»¶ã«é¢ããã³ã¡ã³ããæè¿ããŸãã
django-pdb
ãã1ã€ã®åªããã¢ãžã¥ãŒã«ãä»åã¯Djangoã®django-pdbã§ãã ãªã¯ãšã¹ãã«é©åãªGETãã©ã¡ãŒã¿ãŒãããå ŽåïŒäŸïŒ http : //127.0.0.1 : 8000 / app / view?ipdb ïŒããŸãã¯ãã¹ãŠã®ãªã¯ãšã¹ãã«å¯ŸããŠãããã¬ãŒãå®è¡ã§ããŸãã
â python manage.py runserver --ipdb
ãŸãã¯ãäŸå€ãçºçãããšãã«ãããã¬ãŒãåŒã³åºããŸãïŒäºåŸåæã¢ãŒãïŒïŒ
â python manage.py runserver --pm
ãŸãã¯
POST_MORTEM = True
settings.pyã§ã
ãžã£ã³ãŽæ¡åŒµ
ããããDjangoã§ã¯ãéåžžã«äŸ¿å©ãªrunserver_plusã³ãã³ããè¿œå ããdjango-extensionsã¢ãžã¥ãŒã«ã䜿çšããæ¹ãã¯ããã«åªããŠããŸãã ãã®ããããªãŒã䜿çšãããšãDjangoããã³WerkzeugïŒäžèšãåç §ïŒãšåéã«ãªãã500ãšã©ãŒã§ããŒãžã楜ããããšãã§ããŸã=ïŒ
ãã®å¥è·¡ããã¹ãŠäœ¿çšããã«ã¯ãrunserver_plusã³ãã³ãã䜿çšããŠéçºãµãŒããŒãèµ·åããã ãã§ãã
â python manage.py runserver_plus
æ©sent
éçºç°å¢ã§ããã°ã©ã ããããã°ããããšã¯ããã¡ãã䟿å©ã§è¯ãããšã§ãããæãé£ããããšã¯ãå®éã®ãŠãŒã¶ãŒããã®ãã°å ±åã«ãã£ãŠåé¡ãç¹å®ããããšã§ãã æã«ã¯ããã¯é£ããã§ãã Pythonã®ãã¹ãŠã®å©ç¹ã«ãããããããããã¬ãã·ãŒãã¢ãžã¥ãŒã«ã¯ååšãããéçºè ã¯ãŠãŒã¶ãŒã®ãäœãæ©èœããªã!!! 11ããšããèšèã«çŽé¢ããŠããŸãã
Sentryãããžã§ã¯ãã§ã¯ãäŸå€ããã¹ããå®å šãªäŸå€ãã¬ãŒã¹ãåã¹ã¿ãã¯ãã¬ãŒã¹é¢æ°ã®ãã¹ãŠã®ããŒã«ã«å€æ°ã®å€ãããã³ãã®ä»ã®æ å ±ïŒãŠãŒã¶ãŒã®ç°å¢ïŒãã©ãŠã¶ãŒãOSïŒããã¹ãŠã®ãªã¯ãšã¹ãããããŒãäžè¬çã«éçºè ãæããã¹ãŠïŒãå«ããã¹ãŠã®ãŠãŒã¶ãŒãšã©ãŒãä¿åã§ããŸãã

åäžã®ãšã©ãŒã¯ã°ã«ãŒãåãããŠããããããããžã§ã¯ãã®ããã«ã¹ãã芳å¯ããæåã«æãéèŠãªå Žæã修埩ã§ããŸãã ã»ã³ããªãŒã䜿çšããå¥ã®äŸã¯ããã®ã³ã°ã§ãã è°è«ã®äœå°ã®ããå Žæã§ãéçºè ã«ãšã£ãŠé¢å¿ã®ããå€æ°ãå«ãã¡ãã»ãŒãžããã°ãã¡ã€ã«ã«è¿œå ããã ãã§ãããããã¹ãŠãæ©ryã«è¡šç€ºãããŸãã
ããããæ倧ã®ãã©ã¹ã¯ãããããã¹ãŠãæ¬çªç°å¢ã§äœ¿çšã§ããããšã§ãïŒå®éã«äœ¿çšããå¿ èŠããããŸãïŒïŒã
PuDB
å¥ã®èå³æ·±ããããã¬ãŒïŒ PuDBã¯ãã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ãåããã³ã³ãœãŒã«ãããã¬ãŒã§ãã

ããã«ã€ããŠã¯ããŸã説æããŸããïŒæ£çŽãªãšãããç§ã¯ç©æ¥µçã«äœ¿çšããŸããã§ããïŒããŠãŒã¶ãŒint22hã®HaberïŒ Convenient debugger for Python / Djangoãããžã§ã¯ãã«é¢ããçãã¡ã¢ãèªãããããå®å šãªã¬ãã¥ãŒïŒ PuDBã䜿çšããPython / Djangoã®ãããã°ããå§ãããŸãã
Winpdb
ã¹ã¿ã³ãã¢ãã³Pythonãããã¬ãŒãä»åã¯å®å šãªGUIã䜿çšïŒ Winpdb ïŒ

éçºè ã¯ãwinpdbã¯pdbãã20åé«éã§ãããã¹ã¬ããã®æäœããµããŒãããŠãããšäž»åŒµããŠããŸãã éåžžã«å€§èŠæš¡ã§è©³çŽ°ãªãã¥ãŒããªã¢ã«ã¯ããã®ããŒãžcode.google.com/p/winpdb/wiki/DebuggingTutorialã«ãããŸãã
IDE
ããã°ã©ãã³ã°ã®æ®éçãªãããŒãã¹ã¿ãŒãã«ã¯å¥ã®èšèãå¿ èŠã§ããIDEããšãã£ã¿ãŒãé¢ããããšãªããã³ãŒãã®å®è¡ããããã¡ã€ã«ããŸãã¯çµã¿èŸŒã¿ãããã¬ãŒã®èµ·åãå¯èœã«ããŸãã Pythonã§ã®éçºåãã«èšèšãããããã€ãã®è£œåã PyCharm ã PyDev ã Wing IDE ãããã³PTVSãåãäžããŸãã

åæ
çãªäœè«
æ®å¿µãªãããç§ã¯å人çã«ã§ããéãã®ããšãããããšãããã³ã³ãœãŒã«ãšãæ°ã«å
¥ãã®ããã¹ããšãã£ã¿ãŒïŒvimãemacsããŸãã¯åŽé«ãªããã¹ãïŒã§äœæ¥ããé床ãé©ãã»ã©ã®æè»æ§ãå©äŸ¿æ§ãäžèšã®IDEã®ããããã«å€æŽããããšã¯ã§ããŸããã§ããããç§ã®ååã¯æåããŸãããããã¯äœ¿çšãããŠãããããå°ãªããšããããã®çŽ æŽããã補åã«ãã£ã³ã¹ãäžããŠè©ŠããŠã¿ãããšããå§ãããŸãã
æ£çŽã«èšã£ãŠããããã®åIDEãæ€èšããããšã«ã¯ããŸãæå³ããããŸãããããããååšããã¿ã¹ã¯ã«ããŸã察åŠã§ããããšãç¥ã£ãŠããã ãã§ååã§ããçµã¿èŸŒã¿ã®ãããã¬ãŒããšãã£ã¿ãŒããçŽæ¥äœ¿çšã§ããŸããæ¬åœã«äŸ¿å©ã§ããã£ããããŠããã£ãããã§ãã
èªãã§ã³ã¡ã³ãããŠãããã¿ããªã«æè¬ããŸãã
ãŠã©ãžããŒã«ã»ã«ããã¯ã
Mail.Ruã«ã¬ã³ããŒã®ãã¯ãã«ã«ãã£ã¬ã¯ã¿ãŒ