Error.captureStackTrace()
Error.captureStackTrace() ã¯éçã¡ã½ããã§ãæå®ããããªãã¸ã§ã¯ãã«ã¹ã¿ãã¯ãã¬ã¼ã¹æ
å ±ã stack ããããã£ã¨ãã¦è¨å®ãã¾ãã
æ§æ
Error.captureStackTrace(object)
Error.captureStackTrace(object, constructor)
弿°
object-
stackããããã£ã追å ãã対象ãªãã¸ã§ã¯ãã§ãã constructorçç¥å¯-
颿°ãé常ã¯
objectã使ãããã³ã³ã¹ãã©ã¯ã¿ã¼ãã¹ã¿ãã¯ãã¬ã¼ã¹ãåéããéããã®é¢æ°ã¸ã®æä¸ä½ã®å¼ã³åºããå«ã¿ãããããä¸ã®ãã¹ã¦ã®ãã¬ã¼ã ã¯ã¹ã¿ãã¯ãã¬ã¼ã¹ããé¤å¤ããã¾ãã
è¿å¤
ãªã (undefined)ã
object ã¯ãã®å ´ã§å¤æ´ãããstack ã¨ãã追å ã®èªå·±ããããã£ãå®ç¾©ããã¾ãããã®ããããã£ã®æååå¤ã¯ Error.prototype.stack ã¨åãå½¢å¼ã«å¾ãã¾ãããã®ããããã£ã¯åæä¸å¯ãã¤è¨å®å¯è½ã§ããV8 ã§ã¯ã²ãã¿ã¼ã»ã»ãã¿ã¼ã®ãã¢ã§ããSpiderMonkey ããã³ JavaScriptCore ã§ã¯æ¸ãè¾¼ã¿å¯è½ãªãã¼ã¿ããããã£ã§ãã
ä¾
>Error.captureStackTrace() ã®ä½¿ç¨
getStack() ã¯ã¦ã¼ãã£ãªãã£é¢æ°ã§ãå¼ã³åºãããæç¹ã§ã®ç¾å¨ã®ã¹ã¿ãã¯ãã¬ã¼ã¹ãè¿ãã¾ãããã®éãèªèº«ãã¹ã¿ãã¯ããåé¤ãã¾ãããã㯠console.trace() ã¨åããããã°ç®çãæããã¾ãããæååãå¥ã®å ´æã«åºåã§ããããã«ãã¾ãããªãããã®ç®çã®ããã« Error ã¤ã³ã¹ã¿ã³ã¹ãæ§ç¯ããã®ã§ã¯ãªããåç´ãªãªãã¸ã§ã¯ãã« stack ãè¨å®ãã¾ããããã¯ç§ãã¡ã®ç®çã«ããå¹ççã§ããé常ã¯ã次ã®ä¾ã«ç¤ºãããã«ãã¨ã©ã¼ã¨ãã¦ã¹ãã¼ãããäºå®ã®ãªãã¸ã§ã¯ãã«å¯¾ã㦠Error.captureStackTrace ãå¼ã³åºãã¾ãã
function getStack() {
const obj = {};
if ("captureStackTrace" in Error) {
// getStack èªä½ãã¹ã¿ãã¯ãã¬ã¼ã¹ã«å
¥ãã®ãé²ã
Error.captureStackTrace(obj, getStack);
}
return obj.stack;
}
function foo() {
console.log(getStack());
}
foo();
// Error
// at foo (<anonymous>:8:15)
// at <anonymous>:11:1
ã«ã¹ã¿ã ã¨ã©ã¼ãªãã¸ã§ã¯ãã¸ã®ã¹ã¿ãã¯ãã¬ã¼ã¹ã®ã¤ã³ã¹ãã¼ã«
Error.captureStackTrace() ã®ä¸»ãªç¨éã¯ãã«ã¹ã¿ã ã¨ã©ã¼ãªãã¸ã§ã¯ãã«ã¹ã¿ãã¯ãã¬ã¼ã¹ãè¨å®ãããã¨ã§ããé常ãã«ã¹ã¿ã ã¨ã©ã¼ã¯ Error ã¯ã©ã¹ãæ¡å¼µãã¦å®ç¾©ãã¾ããããã«ãããç¶æ¿ãéã㦠stack ããããã£ãèªåçã«å©ç¨å¯è½ã«ãªãã¾ãããã ããããã©ã«ãã®ã¹ã¿ãã¯ãã¬ã¼ã¹ã«ã¯ã³ã³ã¹ãã©ã¯ã¿å¼ã³åºãèªä½ãå«ã¾ãããããå®è£
ã®è©³ç´°ãæ¼æ´©ããã¨ããåé¡ãããã¾ããError.captureStackTrace() ã使ç¨ããã°ãError ãç¶æ¿ããªãã«ã¹ã¿ã ã¨ã©ã¼ã«å¯¾ãã¦ãã¹ã¿ãã¯ãã¬ã¼ã¹ãè¨å®ã§ããããããã®åé¡ãåé¿ã§ãã¾ãã
class MyError extends Error {
constructor(message, options) {
super(message, options);
if ("captureStackTrace" in Error) {
// MyError èªä½ãã¹ã¿ãã¯ãã¬ã¼ã¹ã«å
¥ãã®ãé²ã
Error.captureStackTrace(this, MyError);
}
}
}
const myError = new MyError("Something went wrong");
console.log(myError.stack);
// Error: Something went wrong
// at <anonymous>:8:17
ããã§ Error.captureStackTrace() ãå¼ã³åºããªãã¦ããã³ã³ã¹ãã©ã¯ã¿ã¼ã Error ãç¶æ¿ãã¦ããå ´åãä¸é¨ã®ã¨ã³ã¸ã³ã¯è³¢ãã¹ã¿ãã¯ãã¬ã¼ã¹ãã MyError ãåé¿ãã¾ããError.captureStackTrace() ã®å¼ã³åºãã¯ãä½ããã®çç±ã§ Error ãç¶æ¿ãã¦ããªãã«ã¹ã¿ã ã¨ã©ã¼ã«å¯¾ãã¦ããéè¦ã§ãã
class MyError {
constructor(message) {
this.message = message;
if ("captureStackTrace" in Error) {
// MyError èªä½ãã¹ã¿ãã¯ãã¬ã¼ã¹ã«å
¥ãã®ãé²ã
Error.captureStackTrace(this, MyError);
}
}
}
const myError = new MyError("Something went wrong");
console.log(myError.stack);
// Error: Something went wrong
// at <anonymous>:8:17
仿§æ¸
| Specification |
|---|
| Unknown specification> # errorcapturestacktrace-1> |