Vynutit trasování zásobníku pomocí JavaScriptu

Nedávno jsem zdědil projekt Node.js a člověk je tak děsivý. Kód byl dobře napsaný, ale kdykoli zdědíte projekt, okamžitě zdědíte strach z toho, že věci zpackáte. Mým cílem bylo opravit poměrně rutinní chybu a najít problém bylo poměrně snadné, ale sledování kódu, abych zjistil, co volalo co a co přešlo, co byla noční můra.

Takže jsem udělal jedinou věc, kterou jsem mohl udělat, abych zjistil, že se WTF děje:

// The magic
console.log(new Error().stack);

/* SAMPLE:

Error
    at Object.module.exports.request (/home/vagrant/src/kumascript/lib/kumascript/caching.js:366:17)
    at attempt (/home/vagrant/src/kumascript/lib/kumascript/loaders.js:180:24)
    at ks_utils.Class.get (/home/vagrant/src/kumascript/lib/kumascript/loaders.js:194:9)
    at /home/vagrant/src/kumascript/lib/kumascript/macros.js:282:24
    at /home/vagrant/src/kumascript/node_modules/async/lib/async.js:118:13
    at Array.forEach (native)
    at _each (/home/vagrant/src/kumascript/node_modules/async/lib/async.js:39:24)
    at Object.async.each (/home/vagrant/src/kumascript/node_modules/async/lib/async.js:117:9)
    at ks_utils.Class.reloadTemplates (/home/vagrant/src/kumascript/lib/kumascript/macros.js:281:19)
    at ks_utils.Class.process (/home/vagrant/src/kumascript/lib/kumascript/macros.js:217:15)
*/

Na skutečné „chybě“ samozřejmě nezáleží – trasování zásobníku je přesně to, co potřebujete, abyste zjistili, co v řetězci volá. Pokud je k dispozici, můžete také použít console.trace() (pokud je k dispozici), abyste dosáhli zhruba stejného výstupu. Můžete mi poděkovat později!