Git Product home page Git Product logo

krt's Introduction

KRT

Simple, small, interactive, console-based Python debugger.

  • 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 anything

Initializing 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.

Setting up django command
  1. Inside django applicaiton directory, create directory called management, inside which create directory commands. Following path, must exists django_project/application/management/commands/.
  2. Create __init__.py inside management and commands directories.
  3. Inside directory commands, create file <command>.py, where <command> will be used with manage.py. Let's say that we've used krt_runserver.py.
  4. 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)

Use decorator inside view

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.

krt's People

Contributors

nthe avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.