1. 18 Apr, 2007 1 commit
    • Simon Marlow's avatar
      Various cleanups and improvements to the breakpoint support · 38e7ac3f
      Simon Marlow authored
        - move parts of the debugger implementation below the GHC API where
          they belong.  There is still more in Debugger that violates the
          layering, hopefully I'll get to that later.
        - instead of returning an IO action from runStmt for resuming,
          return a ResumeHandle that is passed to GHC.resume.
        - breakpoints now return [Name] which is displayed in the same
          way as when a binding statement is executed.
        - :load, :add, :reload now clear the active breakpoints and context
        - :break gives a sensible error when used on a non-interpreted module
        - export breakpoint-related types from GHC
        - remove a bunch of layer-violating imports from InteractiveUI
        - remove some more vestiges of the old breakpoint code (topLevel in
          the GHCi state).
        - remove TickTree and use a simple array instead, cached per module
  2. 17 Apr, 2007 1 commit
    • Simon Marlow's avatar
      Re-working of the breakpoint support · cdce6477
      Simon Marlow authored
      This is the result of Bernie Pope's internship work at MSR Cambridge,
      with some subsequent improvements by me.  The main plan was to
       (a) Reduce the overhead for breakpoints, so we could enable 
           the feature by default without incurrent a significant penalty
       (b) Scatter more breakpoint sites throughout the code
      Currently we can set a breakpoint on almost any subexpression, and the
      overhead is around 1.5x slower than normal GHCi.  I hope to be able to
      get this down further and/or allow breakpoints to be turned off.
      This patch also fixes up :print following the recent changes to
      constructor info tables.  (most of the :print tests now pass)
      We now support single-stepping, which just enables all breakpoints.
        :step <expr>     executes <expr> with single-stepping turned on
        :step            single-steps from the current breakpoint
      The mechanism is quite different to the previous implementation.  We
      share code with the HPC (haskell program coverage) implementation now.
      The coverage pass annotates source code with "tick" locations which
      are tracked by the coverage tool.  In GHCi, each "tick" becomes a
      potential breakpoint location.
      Previously breakpoints were compiled into code that magically invoked
      a nested instance of GHCi.  Now, a breakpoint causes the current
      thread to block and control is returned to GHCi.
      See the wiki page for more details and the current ToDo list:
  3. 22 Mar, 2007 1 commit
  4. 21 Feb, 2007 1 commit
  5. 16 Feb, 2007 3 commits
  6. 07 Feb, 2007 1 commit
    • mnislaih's avatar
      Optimize dynamic breakpoints for speed · 9004e883
      mnislaih authored
      Made a bit faster the test which gets done every time a running program hits a dynamic breakpoint. I moved the bounds checking inside a DEBUG pragma and replaced (IArray.!) for unsafeAt
  7. 21 Jan, 2007 2 commits
    • mnislaih's avatar
      Improve presentation of :print output · 69346489
      mnislaih authored
    • mnislaih's avatar
      Refactoring of Debugger.hs · 01314483
      mnislaih authored
      A big motivation to start with it was getting several independently useful functions out of the Ghci monad and into the IO monad instead. Working in debugger integration for Emacs via the ghc-api is helping me to improve reusability..
            While I was there, I tried to make the code less tangled, easier to understand, switched from implicit Exceptions to explicit Eithers in the bkptTable code, etc.
  8. 20 Jan, 2007 1 commit
  9. 11 Jan, 2007 2 commits
  10. 05 Jan, 2007 3 commits
  11. 03 Jan, 2007 1 commit
  12. 18 Dec, 2006 1 commit
  13. 11 Dec, 2006 1 commit
  14. 10 Dec, 2006 2 commits
    • mnislaih's avatar
      Closure inspection in GHCi · 121da25a
      mnislaih authored
      The :print, :sprint and :force commands for GHCi.
      This set of commands allows inspection of heap structures of the bindings in the interactive environment.
      This is useful to observe lazyness and specially to inspect things with undespecified polymorphic types, as happens often in breakpoints.
    • mnislaih's avatar
      Dynamic breakpoints in GHCi · 8bc615fd
      mnislaih authored
      This patch adds dynamic breakpoints to GHCi
      There is a new ':breakpoint' command to manage breakpoints.
      GHCi simply uses the breakpoint api functions in ghc-api to install itself as a client.
      The mechanism used by GHCi to keep track of enabled breakpoints is a simple table.
      When a breakpoint is hit, a new interactive session is launched and the bindings in the breakpoint are injected. Some commands are disabled in this sub session