简易示例代码如下
let job = `let a ='abc'; console.log(a.b.c)`
let fun = new Function(job)
try{fun()}catch(e){
console.warn(e.stack)
}
报错信息
TypeError: Cannot read property 'c' of undefined
at eval (eval at <anonymous> (E:\work\project\test\test2.js:3:11), <anonymous>:3:33)
at Object.<anonymous> (E:\work\project\test\test2.js:4:5)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
可以看到捕获到的ERROR的堆栈追踪到3:11就结束了。实际情况中,${job}是存在数据库临时运行时加载的。由于获取不到${job}中实际出错的代码内容及行数等信息,此时想要调试${job}就变为非常不方便,请问有什么方法能够追踪到构造函数内部的错误或是其他间接解决办法?
在
console.warn(e.stack)
前面加个console.log(job)
啊,就知道源程序是啥,然后根据错误提示再调试不就可以了吗?