Weiß jemand, wie man einen Stack-Trace in Node.js drucken?
Wenn Sie möchten, dass ein Fehler einen stack
Eigenschaft müssen Sie dies aufrufen, wenn Node >= 6: Error.captureStackTrace(error)
.
Weiß jemand, wie man einen Stack-Trace in Node.js drucken?
In v15.12.0 gibt es verschiedene Methoden, dies zu tun,
1. console.trace(anything)
2. Error.captureStackTrace(Object)
3. console.log(new Error().stack)
4. Try Catch - Use console.log(e), where `e` is catched by catch block
ODER noch besser stacktracejs in jedem Javascript-Code
Versuchen Sie Error.captureStackTrace(targetObject[, constructorOpt]) .
const myObj = {};
function c() {
// pass
}
function b() {
Error.captureStackTrace(myObj)
c()
}
function a() {
b()
}
a()
console.log(myObj.stack)
Die Funktion a
y b
werden im Fehlerstapel aufgefangen und in myObj
.
Wenn Sie möchten, dass ein Fehler einen stack
Eigenschaft müssen Sie dies aufrufen, wenn Node >= 6: Error.captureStackTrace(error)
.
Soweit ich weiß, ist es nicht möglich, den kompletten Stacktrace in Nodejs auszudrucken, man kann nur einen "partiellen" Stacktrace ausdrucken, man kann nicht sehen, von wo aus man im Code gekommen ist, nur wo die Exception auftritt. Das ist, was Ryan Dahl in diesem youtube-Video erklärt. http://youtu.be/jo_B4LTHi3I bei mindestens 56:30, um genau zu sein. Hoffentlich hilft das
Für den Fall, dass jemand wie ich noch auf der Suche ist, gibt es ein Modul namens "stack-trace". Es ist sehr beliebt. NPM-Verbindung
Gehen Sie dann die Spur durch.
var stackTrace = require('stack-trace');
.
.
.
var trace = stackTrace.get();
trace.map(function (item){
console.log(new Date().toUTCString() + ' : ' + item.toString() );
});
Oder drucken Sie einfach die Spur:
var stackTrace = require('stack-trace');
.
.
.
var trace = stackTrace.get();
trace.toString();
Details zum Funktionsaufrufer abrufen:
/**
* @typedef {Object} TCallerInfo
* @property {() => string} toString
* @property {string} str Caller error stack line.
* @property {string} file Caller file path.
* @property {number} line Caller line.
* @property {number} col Caller column.
* @property {Error} error Caller error stack instance.
*/
/**
* @returns {TCallerInfo | null}
*/
function getCallerLine() {
const err = new Error();
const stack = err.stack || '';
const callerLine = stack.split(/\n\s*at\s+/g);
if (callerLine.length >= 2) {
const str = callerLine[3];
const [file, line, col] = str
.replace(/^\s*at\s+/, '')
.replace(/^(.*):(\d+):(\d+)$/, '$1|$2|$3')
.split(/\|/g);
const o = {
toString: () => str,
get str() {
return str;
},
get file() {
return file;
},
get line() {
return parseInt(line);
},
get col() {
return parseInt(col);
},
get error() {
return err;
},
};
return o;
} else {
return null;
}
}
Verwendung:
function foo() {
console.info(getCallerLine());
}
foo(); // Prints this line as Caller Line details.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.