javascript / expert
Snippet
Benutzerdefinierte Stack-Trace-Neuformatierung über Error.prepareStackTrace-Introspektion
V8 ermöglicht das Überschreiben von Error.prepareStackTrace, um Zugriff auf strukturierte CallSite-Objekte anstelle von bloßen Zeichenketten-Stacktraces zu erhalten. Dies ermöglicht die programmatische Auswertung von Dateipfaden, Zeilennummern, Funktionsnamen und nativen Ausführungskontexten für Sicherheitsmonitoring oder erweiterte Diagnosen.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function captureCallsiteAudit() {const originalPrepare = Error.prepareStackTrace;Error.prepareStackTrace = (_, stack) => {return stack.map((site) => ({file: site.getFileName(),line: site.getLineNumber(),fn: site.getFunctionName() || '<anonymous>',isNative: site.isNative()}));};const err = new Error();Error.captureStackTrace(err, captureCallsiteAudit);const stackFrames = err.stack;Error.prepareStackTrace = originalPrepare;return stackFrames;}const auditLog = captureCallsiteAudit();
nodejs
Erklärung
1
Error.prepareStackTrace = (_, stack) => {
Überschreibt V8's Stack-Formatierungs-Hook, um strukturierte CallSite-Objekte abzufangen.
2
file: site.getFileName(), line: site.getLineNumber(),
Extrahiert genaue Dateipfade und Zeilennummern über die V8-CallSite-API.
3
Error.captureStackTrace(err, captureCallsiteAudit);
Schneidet Frames oberhalb der angegebenen Zielfunktion ab, um interne Aufrufstapel auszublenden.
4
Error.prepareStackTrace = originalPrepare;
Stellt das ursprüngliche Stack-Formatierverhalten wieder her, um globale Seiteneffekte zu vermeiden.