diff options
author | Tamar Christina <tamar@zhox.com> | 2017-10-22 12:14:22 +0100 |
---|---|---|
committer | Tamar Christina <tamar@zhox.com> | 2017-10-22 12:16:49 +0100 |
commit | 99c61e2220c4cba20117107f371aace68668a42f (patch) | |
tree | 236fcbd32cb7c1cfb74c4bc11c32218837c24287 /docs | |
parent | e375bd350bc9e719b757f4dc8c907c330b26ef6e (diff) | |
download | haskell-99c61e2220c4cba20117107f371aace68668a42f.tar.gz |
Add stack traces on crashes on Windows
Summary:
This patch adds the ability to generate stack traces on crashes for Windows.
When running in the interpreter this attempts to use symbol information from
the interpreter and information we know about the loaded object files to
resolve addresses to symbols.
When running compiled it doesn't have this information and then defaults
to using symbol information from PDB files. Which for now means only
files compiled with ICC or MSVC will show traces compiled.
But I have a future patch that may address this shortcoming.
Also since I don't know how to walk a pure haskell stack, I can for now
only show the last entry. I'm hoping to figure out how Apply.cmm works to
be able to walk the stalk and give more entries for pure haskell code.
In GHCi
```
$ echo main | inplace/bin/ghc-stage2.exe --interactive ./testsuite/tests/rts/derefnull.hs
GHCi, version 8.3.20170830: http://www.haskell.org/ghc/ :? for help
Ok, 1 module loaded.
Prelude Main>
Access violation in generated code when reading 0x0
Attempting to reconstruct a stack trace...
Frame Code address
* 0x77cde10 0xc370229 E:\..\base\dist-install\build\HSbase-4.10.0.0.o+0x190031
(base_ForeignziStorable_zdfStorableInt4_info+0x3f)
```
and compiled
```
Access violation in generated code when reading 0x0
Attempting to reconstruct a stack trace...
Frame Code address
* 0xf0dbd0 0x40bb01 E:\..\rts\derefnull.run\derefnull.exe+0xbb01
```
Test Plan: ./validate
Reviewers: austin, hvr, bgamari, erikd, simonmar
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3913
Diffstat (limited to 'docs')
-rw-r--r-- | docs/users_guide/8.4.1-notes.rst | 4 | ||||
-rw-r--r-- | docs/users_guide/runtime_control.rst | 6 |
2 files changed, 10 insertions, 0 deletions
diff --git a/docs/users_guide/8.4.1-notes.rst b/docs/users_guide/8.4.1-notes.rst index f59d266789..b787e2e626 100644 --- a/docs/users_guide/8.4.1-notes.rst +++ b/docs/users_guide/8.4.1-notes.rst @@ -188,6 +188,10 @@ Runtime system the list of search directories of GCC and querying the file system directly. This results in much better performance, especially on Windows. +- The GHC runtime on Windows can now generate stack traces on unhandled exceptions. + When running in GHCi more information is displayed about the symbols if available. + This behavior can be controlled with the RTS flag `--generate-stack-traces=<yes|no>`. + Template Haskell ~~~~~~~~~~~~~~~~ diff --git a/docs/users_guide/runtime_control.rst b/docs/users_guide/runtime_control.rst index 905048c69b..9b43277da4 100644 --- a/docs/users_guide/runtime_control.rst +++ b/docs/users_guide/runtime_control.rst @@ -235,6 +235,12 @@ Miscellaneous RTS options The dumps record all code, registers and threading information at the time of the crash. Note that this implies `--install-seh-handlers=yes`. +.. rts-flag:: --generate-stack-traces=<yes|no> + + If yes (the default), the RTS on Windows will generate a stack trace on + crashes if exception handling are enabled. In order to get more information + in compiled executables, C code or DLLs symbols need to be available. + .. rts-flag:: -xm ⟨address⟩ .. index:: |