When a promise is rejected with no catch handler attached, it should:
- Aborting with error code for unhandled rejection to generate core-dump
- Get stack trace from the point where the error was thrown
- Inspecting arguments, closures and variables
# Uncomment deb-src lines on /etc/apt/sources.list | |
sudo apt-get update | |
# Or replace ~/glibc with preferred path to store libc source | |
mkdir -p ~/glibc | |
cd ~/glibc | |
sudo apt-get install -y dpkg-dev | |
sudo apt-get build-deps libc6 | |
apt-get source libc6 |
// Node v10.15.3 | |
uprobe:/home/mmarchini/.nvm/versions/node/v10.15.3/bin/node:_ZN2v88internal17Builtin_JsonParseEiPPNS0_6ObjectEPNS0_7IsolateE | |
{ | |
// Load constants | |
$kPointerSize = (uint32)(1 << (*uaddr("v8dbg_PointerSizeLog2"))); | |
$stringLengthOffset = (uint32)*uaddr("v8dbg_class_String__length__SMI"); | |
$kTag = (uint32)*uaddr("v8dbg_HeapObjectTag"); | |
$kTagMask = (uint32)*uaddr("v8dbg_SmiTagMask"); | |
$kShiftSize = (uint32)*uaddr("v8dbg_SmiShiftSize"); |
$ make LDFLAGS=-static NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 NO_JVMTI=1 | |
BUILD: Doing 'make -j8' parallel build | |
HOSTCC fixdep.o | |
HOSTLD fixdep-in.o | |
LINK fixdep | |
Auto-detecting system features: | |
... dwarf: [ on ] | |
... dwarf_getlocations: [ on ] | |
... glibc: [ on ] |
(lldb) target create "/home/mmarchini/.nvm/versions/node/v12.3.0/bin/node" --core "core.frame-scenario.1" | |
Core file '/home/mmarchini/workspace/nodejs/llnode/core.frame-scenario.1' (x86_64) was loaded. | |
(lldb) plugin load '/home/mmarchini/workspace/nodejs/llnode/llnode.so' | |
(lldb) settings set prompt '(llnode) ' | |
(llnode) command script import diagnose_unwind | |
bind: Invalid command `enable-meta-key'. | |
The "diagnose-unwind" command has been installed, type "help diagnose-unwind" for detailed help. | |
(llnode) diagnose-unwind | |
LLDB version lldb version 6.0.1 | |
Unwind diagnostics for thread 1 |
#include <v8.h> | |
#include <v8-postmortem.h> | |
#include <napi.h> | |
#include <lldb/API/SBDebugger.h> | |
#include <lldb/API/SBTarget.h> | |
#include <lldb/API/SBProcess.h> | |
#include <iostream> | |
using lldb::addr_t; |
'use strict'; | |
const http = require('http'); | |
const port = 3000; | |
class Visit { | |
constructor(visit_id, headers) { | |
this.visit_id = visit_id; | |
this.headers = headers; | |
} |
#!/usr/bin/env zsh | |
local LAMBDA="%(?,%{$fg_bold[green]%}λ,%{$fg_bold[red]%}λ)" | |
function get_pwd(){ | |
git_root=$PWD | |
while [[ $git_root != / && ! -e $git_root/.git ]]; do | |
git_root=$git_root:h | |
done | |
if [[ $git_root = / ]]; then |
$ node benchmark/compare.js --old ./node-master --new ./node-hack-the-stack http > compare-hack-the-stack.http.csv
$ cat compare-hack-the-stack.http.csv | Rscript benchmark/compare.R
confidence improvement accuracy (*) (**) (***)
http/bench-parser.js n=100000 len=16 -1.17 % ±3.73% ±4.96% ±6.46%
http/bench-parser.js n=100000 len=32 -1.55 % ±3.19% ±4.24% ±5.52%
http/bench-parser.js n=100000 len=4 -2.90 % ±4.20% ±5.59% ±7.27%
http/bench-parser.js n=100000 len=8 -2.39 % ±3.41% ±4.54% ±5.91%
http/check_invalid_header_char.js n=1000000 input=''
v8-version,6,1,534,48,0 | |
shared-library,"/usr/bin/node",0x00400000,0x01fa2000,0 | |
shared-library,"/lib/x86_64-linux-gnu/libc-2.26.so",0x7f8a84f0c000,0x7f8a850e2000,0 | |
shared-library,"/lib/x86_64-linux-gnu/libpthread-2.26.so",0x7f8a852ec000,0x7f8a85306000,0 | |
shared-library,"/lib/x86_64-linux-gnu/libgcc_s.so.1",0x7f8a8550b000,0x7f8a85521000,0 | |
shared-library,"/lib/x86_64-linux-gnu/libm-2.26.so",0x7f8a85722000,0x7f8a85877000,0 | |
shared-library,"/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.24",0x7f8a85a78000,0x7f8a85bf0000,0 | |
shared-library,"/lib/x86_64-linux-gnu/librt-2.26.so",0x7f8a85dfe000,0x7f8a85e05000,0 | |
shared-library,"/lib/x86_64-linux-gnu/libdl-2.26.so",0x7f8a86006000,0x7f8a86009000,0 | |
shared-library,"/lib/x86_64-linux-gnu/ld-2.26.so",0x7f8a8620a000,0x7f8a86231000,0 |