M
util.getCallSites
History
Added in: v22.9.0
v22.9.0
Introduced in: v0.10.0
v0.10.0
Property
column is deprecated in favor of columnNumber.v23.7.0, v22.14.0
Property
CallSite.scriptId is exposed.v23.7.0, v22.14.0
The API is renamed from
util.getCallSite to util.getCallSites().v23.3.0, v22.12.0
util.getCallSites(frameCount?, options?): Object[]
Stability: 1.1Active development
Attributes
frameCount?:
integerOptional number of frames to capture as call site objects.
Default:
10. Allowable range is between 1 and 200.options:
ObjectOptional
sourceMap:
booleanReconstruct the original location in the stacktrace from the source-map.
Enabled by default with the flag
--enable-source-maps.Returns:
Object[]An array of call site objects
functionName:
stringReturns the name of the function associated with this call site.
scriptName:
stringReturns the name of the resource that contains the script for the
function for this call site.
scriptId:
stringReturns the unique id of the script, as in Chrome DevTools protocol
Runtime.ScriptId.lineNumber:
numberReturns the JavaScript script line number (1-based).
columnNumber:
numberReturns the JavaScript script column number (1-based).
Returns an array of call site objects containing the stack of the caller function.
Unlike accessing an error.stack, the result returned from this API is not
interfered with Error.prepareStackTrace.
import { getCallSites } from 'node:util'; function exampleFunction() { const callSites = getCallSites(); console.log('Call Sites:'); callSites.forEach((callSite, index) => { console.log(`CallSite ${index + 1}:`); console.log(`Function Name: ${callSite.functionName}`); console.log(`Script Name: ${callSite.scriptName}`); console.log(`Line Number: ${callSite.lineNumber}`); console.log(`Column Number: ${callSite.columnNumber}`); }); // CallSite 1: // Function Name: exampleFunction // Script Name: /home/example.js // Line Number: 5 // Column Number: 26 // CallSite 2: // Function Name: anotherFunction // Script Name: /home/example.js // Line Number: 22 // Column Number: 3 // ... } // A function to simulate another stack layer function anotherFunction() { exampleFunction(); } anotherFunction();
const { getCallSites } = require('node:util'); function exampleFunction() { const callSites = getCallSites(); console.log('Call Sites:'); callSites.forEach((callSite, index) => { console.log(`CallSite ${index + 1}:`); console.log(`Function Name: ${callSite.functionName}`); console.log(`Script Name: ${callSite.scriptName}`); console.log(`Line Number: ${callSite.lineNumber}`); console.log(`Column Number: ${callSite.columnNumber}`); }); // CallSite 1: // Function Name: exampleFunction // Script Name: /home/example.js // Line Number: 5 // Column Number: 26 // CallSite 2: // Function Name: anotherFunction // Script Name: /home/example.js // Line Number: 22 // Column Number: 3 // ... } // A function to simulate another stack layer function anotherFunction() { exampleFunction(); } anotherFunction();
It is possible to reconstruct the original locations by setting the option sourceMap to true.
If the source map is not available, the original location will be the same as the current location.
When the --enable-source-maps flag is enabled,sourceMap will be true by default.
import { getCallSites } from 'node:util'; interface Foo { foo: string; } const callSites = getCallSites({ sourceMap: true }); // With sourceMap: // Function Name: '' // Script Name: example.js // Line Number: 7 // Column Number: 26 // Without sourceMap: // Function Name: '' // Script Name: example.js // Line Number: 2 // Column Number: 26
const { getCallSites } = require('node:util'); const callSites = getCallSites({ sourceMap: true }); // With sourceMap: // Function Name: '' // Script Name: example.js // Line Number: 7 // Column Number: 26 // Without sourceMap: // Function Name: '' // Script Name: example.js // Line Number: 2 // Column Number: 26