CNode

怎么在报错时输出更加完整的包括局部变量信息的调用栈

问答
Iitana发布于11 年前最后回复11 年前8 回复3925 浏览0 收藏

rt

查看回复

回复 (8)

C
captainblue2013#1·11 年前

console.trace

I
itana#2·11 年前
引用 captainblue2013console.trace

@captainblue2013 没有局部变量信息啊亲,看清楚题目再回复好吗?

R
raymonife#4·11 年前

我也想知道这个。。。

K
klesh#5·11 年前

没听说过有这样的东东, 局部变量是作用域上的概念,与其大小没有关系,也就是说理论上可以无限大,加上循环引用这些东东。怎么输出?要观察这个东西,建议实时调试。在你想要观察的地方, debugger,然后 node debug 启动。repl 进行观察,或者用 vsc ,有类以 visual stuido 的调试功能。

I
itana#6·11 年前
引用 klesh没听说过有这样的东东, 局部变量是作用域上的概念,与其大小没有关系,也就是说理论上可以无限大,加上循环引用这些东东。怎么输出?要观察这个东西,建议实时调试。在你想要观察的地方, debugge...

@klesh 理论上是可以无限大,但是应该有方法限定输出吧,比如检测循环引用,限制输出大小等等。 我遇到的问题是出现uncaught error的报错,但是不知道函数参数等局部变量的值。需要的话还需要改代码调试,很麻烦。 最好是报错了,然后顺便输出一些信息(不要求多全),方便分析解决一些问题。 线上的问题不多是可以通过调试重现解决的,或者说有些问题通过调试器解决成本太高了。

W
wenbob#7·11 年前
#我覺得一般打印棧就夠了
console.log err.stack 
K
klesh#8·11 年前
引用 itana@klesh 理论上是可以无限大,但是应该有方法限定输出吧,比如检测循环引用,限制输出大小等等。 我遇到的问题是出现uncaught error的报错,但是不知道函数参数等局部变量的值。需要的...

@itana 检测循环当然是可以的,但正如我前面所说,局部和全局只是一个作用域上的概念,局部变量可以引用全局的,或者别的模块的局部变量,这样体积很大。限定输出可能得不到想要观察的对象。你的情况我感觉写日志是比较实际的做法……会遇到这种情况是不是模块套模块调用比较复杂?可以的情况下还是用单元测试把每个模块的功能介定好,这样后期会轻松些,当然写测试是个痛苦的事情。

参与回复
登录后即可参与回复。登录