summaryrefslogtreecommitdiff
path: root/compiler/ghci/Debugger.hs
Commit message (Collapse)AuthorAgeFilesLines
...
* Prevent the binding of unboxed things by :printPepe Iborra2007-12-081-2/+4
|
* Teach :print to follow references (STRefs and IORefs)Pepe Iborra2007-12-041-1/+5
| | | | | | | | | | | | | | | Prelude Data.IORef> :p l l = (_t4::Maybe Integer) : (_t5::[Maybe Integer]) Prelude Data.IORef> p <- newIORef l Prelude Data.IORef> :p p p = GHC.IOBase.IORef (GHC.STRef.STRef {((_t6::Maybe Integer) : (_t7::[Maybe Integer]))}) Prelude Data.IORef> :sp p p = GHC.IOBase.IORef (GHC.STRef.STRef {(_ : _)}) I used braces to denote the contents of a reference. Perhaps there is a more appropriate notation?
* refactoring onlyPepe Iborra2007-12-021-1/+1
|
* Try to manage the size of the text rendered for ':show bindings'Pepe Iborra2007-11-141-5/+18
|
* Fix Trac 1865: GHCi debugger crashes with :printPepe Iborra2007-11-131-1/+1
|
* Better modelling of newtypes in the Term datatypePepe Iborra2007-09-121-4/+12
| | | | | | | This helps to get pretty printing right, nested newtypes were not being shown correctly by :print
* GHCi debugger: Added a -fprint-evld-with-show flagPepe Iborra2007-09-121-1/+6
| | | | | | The flag enables the use of Show instances in :print. By default they are not used anymore
* Refactoring & documenting the Term pprinter used by :printPepe Iborra2007-09-111-4/+3
|
* Custom printer for the Term datatype that won't output TypeRep valuesPepe Iborra2007-09-111-27/+5
| | | | | The term pretty printer used by :print shouldn't output the contents of TypeRep values, e.g. inside Dynamic values
* Custom printer for the Term datatype that won't output TypeRep valuesPepe Iborra2007-09-111-5/+27
| | | | | The term pretty printer used by :print shouldn't output the contents of TypeRep values, e.g. inside Dynamic values
* warning policePepe Iborra2007-09-061-18/+11
|
* Fix CodingStyle#Warnings URLsIan Lynagh2007-09-041-1/+1
|
* Use OPTIONS rather than OPTIONS_GHC for pragmasIan Lynagh2007-09-031-2/+2
| | | | | | | Older GHCs can't parse OPTIONS_GHC. This also changes the URL referenced for the -w options from WorkingConventions#Warnings to CodingStyle#Warnings for the compiler modules.
* Add {-# OPTIONS_GHC -w #-} and some blurb to all compiler modulesIan Lynagh2007-09-011-0/+7
|
* Warning policePepe Iborra2007-08-291-9/+2
|
* Style: remove trailing spacesPepe Iborra2007-08-261-23/+23
|
* Print contents of bindings when stopping at a breakpointPepe Iborra2007-08-261-23/+28
|
* Automatic RTTI for ghci bindings Pepe Iborra2007-07-141-41/+8
| | | | | | | | | | With this patch, ghci runs rtti (bounded in the term treewith a max. depth of 10) automatically after evaluating any expression in the interactive env. In addition, a rtti step is performed on the local bindings in a breakpoint, before returning control to the user Let's see how well this works in practice
* Teach :print to not panic when the DataCon for a closure is not exposed by ↵Pepe Iborra2007-07-121-6/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | the .hi file Previously the behaviour was to panic. Now it will print an approximated representation, using the names (enclosed in keys, i.e. "<...>") and the pointed subterms. Non pointed subterms cannot be included in this representation: Prelude> let se = Data.Sequence.fromList (map Just "abc") Prelude> :eval se () Prelude> :p se se = <Data.Sequence.Deep> (<Data.Sequence.One> (_t1::t)) () (<Data.Sequence.Two> (_t2::t) (_t3::t)) Prelude> :eval _t2 () Prelude> :p se se = <Data.Sequence.Deep> (<Data.Sequence.One> (_t4::t1)) () (<Data.Sequence.Two> (Just 'b') (_t5::t1)) Prelude> This patch also includes some fixes in the pretty printer for the Term datatype
* Ask for a HscEnv instead of a Session in InteractiveEval.obtainTermPepe Iborra2007-07-111-5/+5
| | | | This does a better job of showing that obtainTerm does not alter the Session
* Clean up for code conventions & add some comment Pepe Iborra2007-05-231-2/+4
|
* Store a SrcSpan instead of a SrcLoc inside a NameSimon Marlow2007-05-111-1/+1
| | | | This has been a long-standing ToDo.
* FIX: Linker.getHValue should be linking in any dependencies it requiresSimon Marlow2007-05-091-2/+1
| | | | | Otherwise :print only works for local identifiers, not global ones. In fact it was silently failing, so I fixed that too.
* Fixed a badly defined pattern match Pepe Iborra2007-05-091-1/+1
|
* use extendInteractiveContext instead of custom codeSimon Marlow2007-05-031-5/+2
|
* Refactoring, tidyup and improve layeringSimon Marlow2007-05-021-10/+6
| | | | | | | | | | | | | | | The stack of breakpoint resume contexts is now part of the InteractiveContext and managed by the GHC API. This prevents misuse of the resume context by the client (e.g. resuming a breakpoint that isn't the topmost, which would lead to a confused IC at the least). I changed the TypeEnv in the IC to a [Id]. It only contained Ids anyway, and this allows us to have shadowing, which removes an ugly and annoying restriction. The parts of the GHC API which deal with interactive evaluation are now in a module of their own, InteractiveEval.
* Add new skolem tyvars to the InteractiveContext after type reconstructionPepe Iborra2007-05-011-3/+8
| | | | | | | This was being done already for each binding added by :print, but :sprint does not add any new binding, so we take care of it separately
* Remove skolem tyvars from the InteractiveContext once they have been ↵Pepe Iborra2007-04-301-1/+5
| | | | instantiated by :print
* Restore tidying up of tyvars in :printPepe Iborra2007-04-301-3/+16
| | | | | It wasn't a good idea to disable it
* Give a better error message when we try to print a value of unknown typeSimon Marlow2007-04-261-1/+1
| | | | | | | | | | | | Stopped at ../Test3.hs:(1,0)-(2,30) _result :: [a] [../Test3.hs:(1,0)-(2,30)] *Main> _result <interactive>:1:0: Ambiguous type variable `a' in the constraint: `Show a' arising from a use of `print' at <interactive>:1:0-6 Cannot resolve unkonwn runtime types: a Use :print or :force to determine these types
* Drop newtypes before computing the refinement substitution after :print type ↵Pepe Iborra2007-04-251-4/+8
| | | | reconstruction
* Fix some corner cases in :print after the recent changesPepe Iborra2007-04-251-2/+6
|
* refactor: move pprintClosureCommand out of the GHCi monadSimon Marlow2007-04-251-12/+6
| | | | | Strictly speaking most of pprintClosureCommand should be exported by the GHC API, but this is a step in the right direction.
* Keep track of free type variables in the interactive bindingsSimon Marlow2007-04-251-10/+8
| | | | | | | | Now, the type checker won't attempt to generalise over the skolem variables in the interactive bindings. If we end up trying to show one of these types, there will be an unresolved predicate 'Show t' which causes a type error (albeit a strange one, I'll fix that later).
* Some tyvars were being introduced in the environment via the thunk bindings ↵Pepe Iborra2007-04-241-3/+12
| | | | '_ti' in :print
* When a type is refined after :print, propagate the substitution to all the ↵Pepe Iborra2007-04-241-40/+27
| | | | interactive environment
* DebuggerTys doesn't exist any moreSimon Marlow2007-04-241-1/+0
|
* We no longer instantiate tyvars to Unknown types in the :print mechanismPepe Iborra2007-04-241-50/+4
| | | | | | Instead, we keep the original tyvars. The plan is to exploit type relationships among closures to recover more types.
* Haskell list syntax for the :print command Pepe Iborra2007-04-201-5/+7
| | | | | | I did quite a bit of clean up in the Term pretty printer code too. Support for infix constructors is still on the TODO list
* :print command - Do not compute all the custom printers, only the first one ↵Pepe Iborra2007-04-141-1/+1
| | | | matching
* Various cleanups and improvements to the breakpoint supportSimon Marlow2007-04-181-52/+11
| | | | | | | | | | | | | | | | | | | | | | | | | - 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
* Re-working of the breakpoint supportSimon Marlow2007-04-171-297/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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: http://hackage.haskell.org/trac/ghc/wiki/NewGhciDebugger
* Warning police: Removed catch-all case which was overlappedsven.panne@aedion.de2007-03-221-1/+0
|
* Fix an incomplete pattern in the code for :printPepe Iborra2007-02-211-15/+16
|
* Fixed a bug with the :print command spotted by Bernie Pope.Pepe Iborra2007-02-161-1/+1
| | | | | Test ghci.debugger/scripts/print018 covers this
* Uniform user interfacePepe Iborra2007-02-161-3/+4
| | | | | | | | | | | Print "Breakpoint set at Main:26:13" instead of "Breakpoint set at (26,13)"
* Taught :breakpoint add to guess the module name if not givenPepe Iborra2007-02-161-14/+19
| | | | | | | | | Now the user can say > :break add 13 at the ghci prompt and the debugger will use the first top level module as the target for the breakpoint
* Optimize dynamic breakpoints for speedPepe Iborra2007-02-071-4/+6
| | | | | 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
* Improve presentation of :print outputPepe Iborra2007-01-211-1/+4
|
* Refactoring of Debugger.hsPepe Iborra2007-01-211-152/+161
| | | | | | 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.