[GHC] #12696: Exception gives not enough information to be useful
GHC
ghc-devs at haskell.org
Thu Oct 13 21:40:14 UTC 2016
#12696: Exception gives not enough information to be useful
-------------------------------------+-------------------------------------
Reporter: flip101 | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Resolution: | Keywords: exception
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Description changed by flip101:
@@ -11,0 +11,2 @@
+ Paraphrased my own words and others from irc:
+
@@ -16,0 +18,15 @@
+ The specific issue is that it's producing what ghci calls an undefined
+ exception, and -xc is producing *** Exception (reporting due to +RTS -xc):
+ (THUNK_2_0).
+ "(THUNK_2_0)" doesn't tell anyone anything. I'd expect to see that it
+ reentered something it wasn't supposed to, or something like that.
+ THUNK_2_0 sounds like an internal GHC thing, which i why i'm filing a bug.
+
+ The +RTS -xc includes names of info tables, which would help identify
+ *what* it's throwing on. but unless the Core is generated at the same time
+ during compilation, it's not possible to find out what. If i generate core
+ now i will get different names. The exception could even be in the
+ standard library. +RTS -xc definitely has a lot of room for improvement
+
+ When the program runs normally it doesn't terminate. The GHCI run
+ terminate because -fbreak-on-exception was set.
@@ -53,0 +70,22 @@
+ λ> _exception
+
+ <interactive>:2:1: error:
+ • No instance for (Show e) arising from a use of ‘print’
+ Cannot resolve unknown runtime type ‘e’
+ Use :print or :force to determine these types
+ Relevant bindings include it :: e (bound at <interactive>:2:1)
+ These potential instances exist:
+ instance [safe] Show Args -- Defined in ‘Test.QuickCheck.Test’
+ instance [safe] Show Result -- Defined in ‘Test.QuickCheck.Test’
+ instance Show a => Show (ZipList a)
+ -- Defined in ‘Control.Applicative’
+ ...plus 297 others
+ ...plus 133 instances involving out-of-scope types
+ (use -fprint-potential-instances to see them all)
+ • In a stmt of an interactive GHCi command: print it
+ λ> :print e
+
+ <interactive>:1:1: error: Not in scope: ‘e’
+ λ> :force e
+
+ <interactive>:1:1: error: Not in scope: ‘e’
New description:
I was told in #haskell @freenode to report this as a bug. I have a program
that throws exceptions and tried debugging the problem within ghci and
also outside of ghci with these commands:
{{{
stack build --ghc-options '-rtsopts -fprof-auto -fprof-auto-calls'
--executable-profiling
stack exec -- vhdl +RTS -xc
}}}
Paraphrased my own words and others from irc:
The bug is that it's a bug that ghc is not reporting something useful on
the exception. So i don't get sufficient information from the debug
facilities. When i have sufficient information i can go ahead and debug my
program. This ticket is not about solving a possible bug in my code.
The specific issue is that it's producing what ghci calls an undefined
exception, and -xc is producing *** Exception (reporting due to +RTS -xc):
(THUNK_2_0).
"(THUNK_2_0)" doesn't tell anyone anything. I'd expect to see that it
reentered something it wasn't supposed to, or something like that.
THUNK_2_0 sounds like an internal GHC thing, which i why i'm filing a bug.
The +RTS -xc includes names of info tables, which would help identify
*what* it's throwing on. but unless the Core is generated at the same time
during compilation, it's not possible to find out what. If i generate core
now i will get different names. The exception could even be in the
standard library. +RTS -xc definitely has a lot of room for improvement
When the program runs normally it doesn't terminate. The GHCI run
terminate because -fbreak-on-exception was set.
{{{#!hs
tfComment :: Data from => from -> from
tfComment = transformBi tf
where tf (Comment ((pos_c, c), (pos_s, s))) = Comment $ ((pos_c,
T.concat ["--", c]), (pos_s, s))
tf a = a
zeroPos :: Data from => from -> from
zeroPos = transformBi zp
where zp sp@(M.SourcePos _ _ _) = sp { M.sourceName="",
M.sourceLine=unsafePos 1, M.sourceColumn=unsafePos 1}
zp x = x
-- (a)dd (e)xtended(i)dentifier (s)laches
aeis :: Data from => from -> from
aeis = transformBi x
where x (IExtended a) = let updated_text :: Text
updated_text = T.concat ["\\", snd $ t_text
a, "\\"]
in IExtended $ a {t_text = (fst $ t_text a,
updated_text)}
x a = a
bla = something..
where parser_prop :: ContextClause -> Bool
parser_prop = \x -> (transformIn <$> Right x) == (transformOut <$>
parseSource parser $ T.toStrict . printSource $ transformIn x)
transformIn ast = zeroPos ast
transformOut ast = tfComment $ aeis $ zeroPos ast
}}}
ghci trace
{{{
λ> :trace main
Stopped in <exception thrown>, <unknown>
_exception :: e = _
λ> _exception
<interactive>:2:1: error:
• No instance for (Show e) arising from a use of ‘print’
Cannot resolve unknown runtime type ‘e’
Use :print or :force to determine these types
Relevant bindings include it :: e (bound at <interactive>:2:1)
These potential instances exist:
instance [safe] Show Args -- Defined in ‘Test.QuickCheck.Test’
instance [safe] Show Result -- Defined in ‘Test.QuickCheck.Test’
instance Show a => Show (ZipList a)
-- Defined in ‘Control.Applicative’
...plus 297 others
...plus 133 instances involving out-of-scope types
(use -fprint-potential-instances to see them all)
• In a stmt of an interactive GHCi command: print it
λ> :print e
<interactive>:1:1: error: Not in scope: ‘e’
λ> :force e
<interactive>:1:1: error: Not in scope: ‘e’
λ> :back
Logged breakpoint at Main.hs:95:13-26
_result :: from -> from
tf :: Comment -> Comment
λ> :list
94 tfComment :: Data from => from -> from
95 tfComment = transformBi tf -- transformBi tf highlighted here
96 where tf (Comment ((pos_c, c), (pos_s, s))) = Comment $ ((pos_c,
T.concat ["--", c]), (pos_s, s))
λ> :back
Logged breakpoint at Main.hs:242:28-57
_result :: from
ast :: from
λ> :list
241 transformIn ast = zeroPos ast
242 transformOut ast = tfComment $ aeis $ zeroPos ast --
tfComment $ aeis $ zeroPos ast highlighted here
243
λ> :force ast
ast = Right []
λ> transformIn (Right [])
Right []
λ> transformOut (Right [])
Right []
λ> zeroPos (Right [])
Right []
λ> aeis (Right [])
Right []
λ> tfComment (Right [])
Right []
}}}
run with profiling options (this was aborted at some point)
{{{
» stack exec -- vhdl +RTS -xc
*** Exception (reporting due to +RTS -xc): (THUNK_2_0), stack trace:
Data.Data.CAF
--> evaluated by: Data.Generics.Uniplate.Internal.Data.sybChildren.f,
called from Data.Generics.Uniplate.Internal.Data.sybChildren,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f.cs,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap.populate,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.biplate.answer,
called from Data.Generics.Uniplate.Data.biplate,
called from Main.CAF:lvl2028_r3oe6
--> evaluated by: Data.HashMap.Base.toList',
called from Data.HashMap.Base.equal,
called from Data.HashMap.Base.==,
called from Data.Generics.Uniplate.Internal.Data.fixEq,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.biplate.answer,
called from Data.Generics.Uniplate.Data.biplate,
called from Main.CAF:lvl2028_r3oe6
*** Exception (reporting due to +RTS -xc): (THUNK_STATIC), stack trace:
Data.Generics.Uniplate.Internal.Data.uniplateVerbose,
called from Data.Generics.Uniplate.Internal.Data.CAF:uniplateVerbose
--> evaluated by: Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.biplate.answer,
called from Data.Generics.Uniplate.Data.biplate,
called from Main.CAF:lvl2028_r3oe6
--> evaluated by: Data.Generics.Uniplate.Internal.Data.fromOracle,
called from Data.Generics.Uniplate.Internal.Data.biplateData,
called from Data.Generics.Uniplate.Data.biplate,
called from Main.tfComment,
called from Main.qcrp.transformOut,
called from Main.qcrp.parser_prop,
called from Main.qcrp.parser_prop,
called from Main.qc2.logInput,
called from Main.qc2.logInput,
called from Main.qc2.logInput,
called from Main.qc2,
called from Test.QuickCheck.Property.forAllShrink.\.\,
called from Test.QuickCheck.Property.property,
called from Test.QuickCheck.Test.quickCheckWithResult.property',
called from Test.QuickCheck.Test.quickCheckWithResult.\,
called from Test.QuickCheck.Text.withNullTerminal,
called from Test.QuickCheck.Test.quickCheckWithResult,
called from Main.qc2,
called from Main.qcrp,
called from Main.ntc
*** Exception (reporting due to +RTS -xc): (THUNK_2_0), stack trace:
Data.Generics.Uniplate.Internal.Data.sybChildren.f,
called from Data.Generics.Uniplate.Internal.Data.sybChildren,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f.cs,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap.populate,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.biplate.answer,
called from Data.Generics.Uniplate.Data.biplate,
called from Main.CAF:lvl2025_r3oe3
--> evaluated by: Data.HashMap.Base.toList',
called from Data.HashMap.Base.equal,
called from Data.HashMap.Base.==,
called from Data.Generics.Uniplate.Internal.Data.fixEq,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.biplate.answer,
called from Data.Generics.Uniplate.Data.biplate,
called from Main.CAF:lvl2025_r3oe3
*** Exception (reporting due to +RTS -xc): (THUNK_2_0), stack trace:
Data.Generics.Uniplate.Internal.Data.sybChildren.f,
called from Data.Generics.Uniplate.Internal.Data.sybChildren,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f.cs,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap.populate,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.biplate.answer,
called from Data.Generics.Uniplate.Data.biplate,
called from Main.CAF:lvl2022_r3oe0
--> evaluated by: Data.HashMap.Base.toList',
called from Data.HashMap.Base.equal,
called from Data.HashMap.Base.==,
called from Data.Generics.Uniplate.Internal.Data.fixEq,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.biplate.answer,
called from Data.Generics.Uniplate.Data.biplate,
called from Main.CAF:lvl2022_r3oe0
*** Exception (reporting due to +RTS -xc): (THUNK_2_0), stack trace:
Data.Generics.Uniplate.Internal.Data.sybChildren.f,
called from Data.Generics.Uniplate.Internal.Data.sybChildren,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f.cs,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap.populate,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.biplate.answer,
called from Data.Generics.Uniplate.Data.biplate,
called from Main.CAF:lvl1945_r3oc9
*** Exception (reporting due to +RTS -xc): (THUNK_2_0), stack trace:
Data.Generics.Uniplate.Internal.Data.sybChildren.f,
called from Data.Generics.Uniplate.Internal.Data.sybChildren,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f.cs,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap.populate,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.descend.answer,
called from Data.Generics.Uniplate.Data.descend,
called from Data.Generics.Uniplate.Operations.transform.g,
called from Data.Generics.Uniplate.Operations.transform,
called from Main.CAF:answer6_r3ocg
--> evaluated by: Data.HashMap.Base.toList',
called from Data.HashMap.Base.equal,
called from Data.HashMap.Base.==,
called from Data.Generics.Uniplate.Internal.Data.fixEq,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.descend.answer,
called from Data.Generics.Uniplate.Data.descend,
called from Data.Generics.Uniplate.Operations.transform.g,
called from Data.Generics.Uniplate.Operations.transform,
called from Main.CAF:answer6_r3ocg
*** Exception (reporting due to +RTS -xc): (THUNK_2_0), stack trace:
Data.Generics.Uniplate.Internal.Data.sybChildren.f,
called from Data.Generics.Uniplate.Internal.Data.sybChildren,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f.cs,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap.populate,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.descend.answer,
called from Data.Generics.Uniplate.Data.descend,
called from Data.Generics.Uniplate.Operations.transform.g,
called from Data.Generics.Uniplate.Operations.transform,
called from Main.CAF:answer7_r3ocp
--> evaluated by: Data.HashMap.Base.toList',
called from Data.HashMap.Base.equal,
called from Data.HashMap.Base.==,
called from Data.Generics.Uniplate.Internal.Data.fixEq,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.descend.answer,
called from Data.Generics.Uniplate.Data.descend,
called from Data.Generics.Uniplate.Operations.transform.g,
called from Data.Generics.Uniplate.Operations.transform,
called from Main.CAF:answer7_r3ocp
*** Exception (reporting due to +RTS -xc): (THUNK_2_0), stack trace:
Data.Generics.Uniplate.Internal.Data.sybChildren.f,
called from Data.Generics.Uniplate.Internal.Data.sybChildren,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f.cs,
called from
Data.Generics.Uniplate.Internal.Data.insertHitMap.populate.f,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap.populate,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.descend.answer,
called from Data.Generics.Uniplate.Data.descend,
called from Data.Generics.Uniplate.Operations.transform.g,
called from Data.Generics.Uniplate.Operations.transform,
called from Main.CAF:answer8_r3ocy
--> evaluated by: Data.HashMap.Base.toList',
called from Data.HashMap.Base.equal,
called from Data.HashMap.Base.==,
called from Data.Generics.Uniplate.Internal.Data.fixEq,
called from Data.Generics.Uniplate.Internal.Data.insertHitMap,
called from Data.Generics.Uniplate.Internal.Data.readCacheFollower,
called from Data.Generics.Uniplate.Data.descend.answer,
called from Data.Generics.Uniplate.Data.descend,
called from Data.Generics.Uniplate.Operations.transform.g,
called from Data.Generics.Uniplate.Operations.transform,
called from Main.CAF:answer8_r3ocy
^C^C^C^C
}}}
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12696#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list