diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-10-12 20:46:11 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-10-12 20:51:01 -0700 |
commit | 5e6b5e313cb2fa9c699934df72a7c975d1d02ad2 (patch) | |
tree | 5efd7ea54a370f4b3012ac198424db2d91a59ed1 /src | |
parent | 5e00090b128125f8d6de1f69f2983b9416dc8347 (diff) |
demangle stacks in abort(), using new stackTrace utility
Diffstat (limited to 'src')
-rw-r--r-- | src/library.js | 2 | ||||
-rw-r--r-- | src/postamble.js | 2 | ||||
-rw-r--r-- | src/preamble.js | 12 |
3 files changed, 12 insertions, 4 deletions
diff --git a/src/library.js b/src/library.js index 5e71b087..aeebe8bb 100644 --- a/src/library.js +++ b/src/library.js @@ -4296,7 +4296,7 @@ LibraryManager.library = { }, llvm_trap: function() { - throw 'trap! ' + new Error().stack; + abort('trap!'); }, __assert_fail: function(condition, filename, line, func) { diff --git a/src/postamble.js b/src/postamble.js index 62edeeb6..d64fb220 100644 --- a/src/postamble.js +++ b/src/postamble.js @@ -180,7 +180,7 @@ function abort(text) { ABORT = true; EXITSTATUS = 1; - throw 'abort() at ' + (new Error().stack); + throw 'abort() at ' + stackTrace(); } Module['abort'] = Module.abort = abort; diff --git a/src/preamble.js b/src/preamble.js index 63fab34e..a85cf2f5 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -644,7 +644,7 @@ function demangle(func) { try { if (typeof func === 'number') func = Pointer_stringify(func); if (func[0] !== '_') return func; - if (func[1] !== '_') return func.substr(1); // C function + if (func[1] !== '_') return func; // C function if (func[2] !== 'Z') return func; var i = 3; // params, etc. @@ -747,10 +747,18 @@ function demangle(func) { } return parse(); } catch(e) { - return func + '<demangle-err>' + e; + return func; } } +function demangleAll(text) { + return text.replace(/__Z[\w\d_]+/, function(x) { var y = demangle(x); return x === y ? x : (x + ' (' + y + ')') }); +} + +function stackTrace() { + return demangleAll(new Error().stack); +} + // Memory management var PAGE_SIZE = 4096; |