Perhaps a more sensible example: $ cat t.hs import Control.Concurrent import Control.Monad
spawnThread :: IO ThreadId spawnThread = forkIO $ forM_ [0..] $ \i -> threadDelay 1000000 $ ghci-7.10.1 t.hs -v0 *Main> t0 <- spawnThread *Main> :break 8 Breakpoint 0 activated at t.hs:8:9-27 *Main> *** Ignoring breakpoint *** Ignoring breakpoint *** Ignoring breakpoint *** Ignoring breakpoint :q $ Thanks, Facundo On Wed, May 20, 2015 at 12:51 PM, Facundo Domínguez <facundo.doming...@tweag.io> wrote: > Hello, > I have a multi-threaded and interactive application that sometimes > stops responding, and it would be helpful being able to inspect the > state when it doesn't. > > I thought the GHCi debugger could be useful here, however I see no way > to signal a thread and have GHCi show me its state. > > Here is an example GHCi session: > > $ cat t.hs > import Control.Concurrent > import Control.Exception > import Control.Monad > import System.IO > > spawnThread :: String -> IO ThreadId > spawnThread label = > forkIO $ flip finally (putStrLn $ "bye " ++ label) $ > forM_ [0..] $ \i -> threadDelay 1000000 > $ ghci-7.10.1 t.hs -fbreak-on-exception -v0 > *Main> hSetBuffering stdout LineBuffering > *Main> t0 <- spawnThread "t0" > *Main> throwTo t0 (ErrorCall "end") > *Main> > > It looks like I'm not getting the "bye t0" message when stopping the > thread while using -fbreak-on-exception. > > Is the debugger supposed to be used like this? Otherwise, is there any > way in which I could inspect the state of a running thread? > > Thanks, > Facundo _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users