- Cross-platform
- Django compatibile
KRT inherits from basic python debugger (called bdb). The main reason behind development of package was need of user interface during python script debugging in console (or when graphical interface is not available). Although pdb have the same (and propbably much more) functionality, I found it not so "user friendly".
###Installation
Install using pip.
pip install krt
##Basic script debugging
python krt.py script.py
# or
python -m krt script.py
###Initializing debugger during program execution
This method of initialization allows initialization at specific line.
import krt
def func(_something, _nothing):
local_var = [1, 2, 3, 4]
# now, initialize krt
krt.trace()
anything = _somethins + _nothing
return anythingInitializing krt via @decorator. This method will initialize krt at 1st line of decorated method or function.
import krt
# initialize krt
@krt.debug()
def func(_something, _nothing):
local_var = [1, 2, 3, 4]
anything = _somethins + _nothing
return anything##Django usage
One can use methods mentioned above, but method below allows krt triggering only if run with pre-defined django command.
- Inside django applicaiton directory, create directory called
management, inside which create directorycommands. Following path, must existsdjango_project/application/management/commands/. - Create
__init__.pyinsidemanagementandcommandsdirectories. - Inside directory
commands, create file<command>.py, where<command>will be used withmanage.py. Let's say that we've usedkrt_runserver.py. - Insert into created file:
from django.core.management.base import BaseCommand
from django.core.management.commands import runserver
class Command(runserver.Command):
help = "Sets trigger for krt decorators"
def __init__(self, *args, **kwargs):
from django.conf import settings
setattr(settings, 'krt_django_decorator_trigger_flag', True)
super(Command, self).__init__(*args, **kwargs)Decorator, when used in django project, requires setting of keyword argument django to True. If the django argument is omitted, the debugger will be always initialized!
from django.http import HttpResponse
from krttest.krt import debug
@debug(django=True)
def index(request):
return HttpResponse("I'm ok.")Now, when the django server is run with created command, KRT debugger is being initialized on 1st line of view, otherwise the decorators are being ignored.
python ./manage.py krt_runserver
Key controls and commands
[ ]next (enter pressed) Evaluate current line and go to next line.
[s]tep-in Step inside if callable, else go to next line.
[r]eturn Return from call to outer frame.
[j]ump [<file>] ['disp'] <line> <verbose>
Jump to line in current file. Setting verbose to True or 1
will perform jump in 'visible' mode. This mode can take
certain amount of time to complete. Consider turning off
code display.
When 'disp' is stated, the number refers to dispatch number,
counted from beginning of program evaluation. Using dispatch
jumping in combination with line jumping will NOT work.
Use '.' as reference to currently debugged file.
Examples:
$ jump . 20
$ jump disp 3000 True
$ jump 20
$ jump disp 300
[c]ontinue Continue evaluation of file.
[w]atch <variable> Add local 'variable' to watches.
[u]n-watch <variable> Remove local 'variable' from watches.
[o]utput Show / hide output of debugged program (replaces whole ui).
[v]ars Show / hide local variables.
[st]ack Show / hide current stack of stack frames.
[co]de Show / hide code display.
[re]size Adjust number of lines of code display.
[h]elp Display small / large help panel.
[q]uit Leave debugger.