Error.prototype.stack
ë¹íì¤: ì´ ê¸°ë¥ì íì¤íëì´ ìì§ ììµëë¤. ë¹íì¤ ê¸°ë¥ì ë¸ë¼ì°ì ì§ìì´ ì íì ì´ë©° ë³ê²½ëê±°ë ì ê±°ë ì ìì¼ë¯ë¡ íë¡ëì íê²½ìì ì¬ì©íë ê²ì ê¶ì¥ëì§ ììµëë¤. ê·¸ë¬ë íì¤ ìµì ì´ ìë í¹ì ìí©ììë ì ì í ëìì´ ë ì ììµëë¤.
ì°¸ê³ :
stack ìì±ì ì¬ì¤ì 모ë 주ì JavaScript ìì§ìì 구íëì´ ìì¼ë©° ìë°ì¤í¬ë¦½í¸ íì¤ ììíìì íì¤í를 모ìíê³ ììµëë¤. 구íìì ë¶ì¼ì¹ë¡ ì¸í´ ì¤í 문ìì´ì ì íí ë´ì©ì ìì¡´í ìë ìì§ë§ ì¼ë°ì ì¼ë¡ ì¡´ì¬íë¤ê³ ê°ì íê³ ëë²ê¹
목ì ì¼ë¡ ì¬ì©í ì ììµëë¤.
Error ì¸ì¤í´ì¤ì ë¹íì¤ stack ìì±ì ì´ë¤ í¨ìê° ì´ë¤ ììë¡, ì´ë¤ ì¤ê³¼ íì¼ìì, ì´ë¤ ì¸ì를 ì¬ì©íì¬ í¸ì¶ëìëì§ ì¶ì í ì ììµëë¤. ì¤í 문ìì´ì ê°ì¥ ìµê·¼ í¸ì¶ìì ì´ì í¸ì¶ë¡ ì§íëë©°, ìëì ì ì ë²ì í¸ì¶ë¡ ëëìê°ëë¤.
ê°
íëì 문ìì´.
stack ìì±ì ë¹íì¤ì´ê¸° ë문ì 구íì²´ì ë°ë¼ ìì¹ê° ë¤ë¦
ëë¤.
- Firefoxììë
Error.prototypeì ì ê·¼ì ìì±ì ëë¤. - Chromeê³¼ Safariììë ê°
Errorì¸ì¤í´ì¤ì ë°ì´í° ìì±ì´ë©° ë¤ìê³¼ ê°ì ì¤ëª ì를 ê°ì§ê³ ììµëë¤.
Property attributes of Error.prototype.stack | |
|---|---|
| ì°ê¸° ê°ë¥ | ê°ë¥ |
| ì´ê±° ê°ë¥ | ë¶ê°ë¥ |
| ì¤ì ê°ë¥ | ê°ë¥ |
ì¤ëª
ê° JavaScript ìì§ë§ë¤ ê³ ì í ì¤í ì¶ì íìì ì¬ì©íì§ë§, ëì ìì¤ì 구조ë 꽤 ì¼ê´ì ì ëë¤. 모ë 구íì ì¤íìì ë³ëì ì¤ì ì¬ì©íì¬ ê° í¨ì í¸ì¶ì ëíë ëë¤. ì¤ë¥ë¥¼ ì§ì ì ì¼ë¡ ì¼ì¼í¨ í¸ì¶ì 맨 ìì ë°°ì¹ëê³ ì ì²´ í¸ì¶ ì²´ì¸ì ìì í¸ì¶ì 맨 ìëì ë°°ì¹ë©ëë¤. ë¤ìì ì¤í ì¶ì ì ëª ê°ì§ ìì ëë¤.
function foo() {
bar();
}
function bar() {
baz();
}
function baz() {
console.log(new Error().stack);
}
foo();
#### JavaScriptCore
baz@filename.js:10:24
bar@filename.js:6:6
foo@filename.js:2:6
global code@filename.js:13:4
#### SpiderMonkey
baz@filename.js:10:15
bar@filename.js:6:3
foo@filename.js:2:3
@filename.js:13:1
#### V8
Error
at baz (filename.js:10:15)
at bar (filename.js:6:3)
at foo (filename.js:2:3)
at filename.js:13:1
ìì§ë§ë¤ ì´ ê°ì ì¤ì íë ìì ì´ ë¤ë¦
ëë¤. ëë¶ë¶ì ìµì ìì§ì Error ê°ì²´ê° ìì±ë ë ì´ ê°ì ì¤ì í©ëë¤. ì¦, ë¤ìì ì¬ì©íì¬ í¨ì ë´ìì ì ì²´ í¸ì¶ ì¤í ì 보를 ì»ì ì ììµëë¤:
function foo() {
console.log(new Error().stack);
}
ì¤ë¥ë¥¼ ë°ììí¨ ë¤ì ë¤ì ì²ë¦¬í íìê° ììµëë¤.
V8ììë ë¹íì¤ Error.captureStackTrace(), Error.stackTraceLimit ë° Error.prepareStackTrace() API를 ì¬ì©íì¬ ì¤í ì¶ì ì ì¬ì©ì ì ìí ì ììµëë¤. ìì¸í ë´ì©ì V8 문ììì ì¤í ì¶ì API를 참조íì¸ì.
ì¤í íë ìì ëª
ìì í¨ì í¸ì¶ ì´ì¸ì ê²ì¼ ìë ììµëë¤. ì를 ë¤ì´ ì´ë²¤í¸ 리ì¤ë, íììì ìì
, íë¡ë¯¸ì¤ ì²ë¦¬ê¸°ë 모ë ìì²´ í¸ì¶ ì²´ì¸ì ììí©ëë¤. eval() ë° Function ìì±ì í¸ì¶ ë´ì ìì¤ ì½ëë ì¤íì ëíë©ëë¤.
console.log(new Function("return new Error('Function failed')")().stack);
console.log("====");
console.log(eval("new Error('eval failed')").stack);
#### JavaScriptCore
anonymous@
global code@filename.js:1:65
====
eval code@
eval@[native code]
global code@filename.js:3:17
#### SpiderMonkey
anonymous@filename.js line 1 > Function:1:8
@filename.js:1:65
====
@filename.js line 3 > eval:1:1
@filename.js:3:13
#### V8
Error: Function failed
at eval (eval at <anonymous> (filename.js:1:13), <anonymous>:1:8)
at filename.js:1:65
====
Error: eval failed
at eval (eval at <anonymous> (filename.js:3:13), <anonymous>:1:1)
at filename.js:3:13
Firefoxììë //# sourceURL ì§ìì´ë¥¼ ì¬ì©íì¬ íê° ìì¤ì ì´ë¦ì ì§ì í ì ììµëë¤. ìì¸í ë´ì©ì Firefox ëë²ê·¸ íê° ìì¤ ë¬¸ìì //# sourceURL ì§ì문ì ì¬ì©íì¬ eval ì¤í¬ë¦½í¸ ì´ë¦ ì§ì í기 ë¸ë¡ê·¸ ê²ì물ì 참조íì¸ì.
ìì
>stack ìì± ì¬ì©í기
ë¤ì ì¤í¬ë¦½í¸ë stack ìì±ì ì¬ì©íì¬ ì¤í ì¶ì ì ë¸ë¼ì°ì ì°½ì ì¶ë ¥íë ë°©ë²ì ë³´ì¬ì¤ëë¤. ì´ë¥¼ ì¬ì©íì¬ ë¸ë¼ì°ì ì ì¤í êµ¬ì¡°ê° ì´ë»ê² ë³´ì´ëì§ íì¸í ì ììµëë¤.
function trace() {
throw new Error("trace() failed");
}
function b() {
trace();
}
function a() {
b(3, 4, "\n\n", undefined, {});
}
try {
a("first call, firstarg");
} catch (e) {
document.getElementById("output").textContent = e.stack;
}
ëª ì¸ì
íì¤ì ì¼ë¶ê° ìëëë¤.
ë¸ë¼ì°ì í¸íì±
ê°ì´ 보기
- TraceKit on GitHub
- stacktrace.js on GitHub
- Stack trace API in the V8 docs