[英]Devtools analyse function calls and variables post-factum
我正在调试一个很难调试的用户脚本,因为该错误很少且不可预测地发生(尚未),并且函数堆栈被重复执行(该错误大约每10到20次发生一次)。 我无法暂停devtools,否则页面将重新加载并且错误不会出现(因此我无法使用断点)。 编辑:即使我停止重新加载页面,我仍然必须反复快速地进行用户输入以导致错误,因此无法使用断点,因为那样会阻止错误的出现。
我能想到的一种方法是将console.log放入每个函数中并记录变量,然后在它们中进行搜索以查找错误之处。 但这似乎很乏味。 在devtools的性能部分,可以记录过程并查看函数调用,但是看不到变量。
是否有任何方法可以遍历函数调用后的堆栈(可能是devtools以外的工具),查看每个周期中的变量等于什么? (并且不仅是当前的调用堆栈,因为它会在我的脚本中的每个用户输入上得到更新)。 还是在这种情况下console.logging是我唯一的选择?
我认为“跳出当前功能”选项会起作用,但是它似乎是不可预测的(至少在有setTimeout的情况下似乎会发生)。 而且功能堆栈会在每个用户输入上进行更新(并且要捕获此错误,用户输入序列应该很快),因此也无法通过调用堆栈。
拥有像调用堆栈树这样的东西是完美的,它可以显示上次调用某个函数的时间(以及在特定时间段内或自页面加载以来的多少次),该函数在目录中的位置是什么。所有功能的树,并具有遍历该树并搜索对特定函数的所有调用实例的能力,然后具有查看每个调用中的变量等于什么的能力。
有很多代码,但是自从被请求以来,这里有一个指向GitHub存储库中的代码的链接(它是Chrome扩展程序,而发生错误的代码在objGA对象内部[在6490的代码行中] )。 而且该错误发生在6600线与6890线之间的某个地方(该错误是有时它不会在棋子上移动棋子)。 这是一个Chrome扩展程序,可通过键盘和鼠标移动棋子。 https://github.com/Sentero-esp12/Lichess-Keyboard-WebRequest-/blob/master/Extension/code.js
编辑:幸运的是,我能够用断点缓慢地重现它(能够找到错误出现的确切时间)。 因此,事实证明我是在使用Math.round
而不是Math.floor
尝试从两位数字中提取第一位数字。 由于只有一些数字> = * 5,因此该错误仅偶尔出现,我无法注意到原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.