Haxe source code positions in call stack and exception stack.
Since 3.4.1, Haxe can generate source maps for the PHP target when compiling with the -D php7
and -D source_map
flags. Generated source maps can be utilized by the JStack library to automatically transform haxe.CallStack.callStack()
, haxe.CallStack.exceptionStack()
and uncaught exceptions to make them point at Haxe sources instead of generated PHP files.
classMain {staticfunctionmain() {terribleError(); }staticfunctionterribleError() {throw"Terrible error"; }}
Building it with flags:
--mainMain-D php7--php build--debug
Running this build will trace the uncaught exception:
$ php build/index.php PHP Fatal error: Uncaught php/_Boot/HxException: Terrible error in build/lib/Main.php:25 Stack trace: #0 build/lib/Main.php(16): Main::terribleError() #1 build/index.php(13): Main::main() #2 {main} thrown in build/lib/Main.php on line 25
Install JStack using haxelib install jstack
. JStack automatically adds the -D source_map
flag, so there is no need to add it manually.
If JStack is installed, it can be added to the compilation process like so:
--mainMain-D php7--php build--debug-L jstack
The output will have a more informative stack trace for exceptions:
$ php build/index.php Terrible error Called from Main.terribleError (src/Main.hx line 7) Called from Main.main (src/Main.hx line 3) Called from build/index.php line 13