[GHC] #3693: Show stack traces

GHC ghc-devs at haskell.org
Fri Jan 24 08:54:43 UTC 2014


#3693: Show stack traces
-------------------------------------+------------------------------------
        Reporter:  jpet              |            Owner:  Tarrasch
            Type:  feature request   |           Status:  new
        Priority:  normal            |        Milestone:  7.10.1
       Component:  Runtime System    |          Version:  6.10.4
      Resolution:                    |         Keywords:
Operating System:  Unknown/Multiple  |     Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown      |       Difficulty:  Unknown
       Test Case:                    |       Blocked By:
        Blocking:                    |  Related Tickets:
-------------------------------------+------------------------------------

Comment (by blitzcode):

 This is all quite tricky since there seem to be so many different
 approaches to consider! ;-)

 For profiling, I am mostly coming at this problem from the perspective of
 already having an external tool that works for C/C++ and wanting to add
 Haskell support to it (it's a sampling profiler, pausing threads and
 capturing their stack, as you already said). I think you make a very valid
 point about already having all the functionality in the RTS (eventually).
 I don't have any technical / ideological reason to prefer an external
 profiler, what I'm after is seeing profiling data in realtime, while the
 program is running. If the RTS is collecting profiling data it could
 either provide some kind of IPC API to have an external tool collect it,
 or maybe just have a Haskell API so one could use a library like EKG to
 show it to the user.

 I couldn't really figure out how the Haskell to C stack transition works,
 but I think that's a less common case than the Haskell to C one anyway.
 Glad to hear that the latter seems to be working!

 I don't agree that having an external program do a stack walk is
 necessarily complicated or awkward. With your DWARF3 work, one should be
 able to use something like libunwind-ptrace
 (http://www.nongnu.org/libunwind/man/libunwind-ptrace%283%29.html) and
 have that functionality available without any custom work.

 For debugging, I think there's merit for an external tool. For RTS
 exceptions we're ok, but as soon as we have an actual segfault, some
 memory corruption has often already taken place. Any kind of stack
 traversal, symbol lookup and error reporting code will have a decent
 chance of failing itself due to a corrupted heap or such.

 The only library that I can think of would be libunwind. It's supported on
 Linux/BSD, Apple ships some kind of version of it on OS X (there are some
 limitations / issues with their port, IIRC), does DWARF2/3. It's not on
 Windows, but there's build-in support for stack walking through the
 DbgHelp library (StackWalk64, no idea if Windows PDB debug information
 supports the kind of wizardry your using to explain the STG stack to a
 DWARF3 debugger, though). It seems generating the right kind of debug
 symbols, and supporting and doing stack walking for Haskell & C/C++ on all
 three platforms is a major challenge...

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/3693#comment:57>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list