如何打破观察变量?

时间:2015-04-02 02:27:10

标签: node.js node-inspector

我正在编写一个简单的命令行Node.js应用程序,其中GLOBAL.thingies神秘地结束了undefined

我使用了node-inspector,我可以在任何给定的行中设置断点,并且我有"观察表达式"对于该变量,就像我在任何调试器中那样。但是,当表达式变为undefined时,我无法找到。如何在变量发生变化时设置断点?

Node-inspector版本0.9.2。

节点版本0.12.2

Chrome版本41

1 个答案:

答案 0 :(得分:1)

我不认为node-inspector具有您要求的功能。

有一些典型的方法可以分析这样的问题,并希望找出正在发生的事情。

理论化你想要的东西

首先,列出GLOBAL.thingies突然以undefined的形式返回的列表。在这个特定原因中,您不仅要查找GLOBAL.thingies的赋值,还要使用一个没有{{1}的新对象替换整个GLOBAL对象。它上面的属性。

代码检查

  1. 对项目中涉及的所有代码执行grep操作,并检查和研究任何能够更改变量的代码。您必须对您的grep充满创意,以确保包含所有可能的参考类型。在您的特定示例中,thingiesGLOBAL.thingies将是访问它的不同方式。在此原因中,您可能只想搜索GLOBAL["thingies"]的任何可能用途,或者甚至想要包含对thingies的所有引用。

  2. 每次参考代码时都会对其进行研究并确定是否是导致问题的嫌疑人。

  3. 使用断点进行二进制搜索

    1. 确定哪个高级别操作会导致变量更改为不需要的状态。
    2. 在调试器中进行设置,以便在变量发生变化之前在该高级操作的开头有一个断点。
    3. 逐步执行该高级操作中的顶级操作,以确定该操作中的哪个操作会导致变量发生变化。
    4. 重新启动内容,以便在变量发生变化之前返回到步骤2中的位置。在导致变量更改的顶级操作之前设置断点。跑到那个断点。
    5. 现在进入该行动。在麻烦的操作中跳过每个顶级函数,直到找到哪个函数导致变量发生变化。
    6. 再次重复该过程,直到更精细更详细的细节,直到您最终找到导致变量更改的函数(不调用其他函数)。然后逐步执行该函数中的每行代码,以找到它正在发生变化的位置。
    7. 在某些情况下,您可以通过使用记录语句来记录代码来简化二进制搜索的范围,该记录语句记录相关变量的值,以便您可以更快地识别变量何时从好到坏以及哪些操作发生在 - 将二进制搜索的范围限制为该操作。如果在可疑区域中有很多异步操作(更难以跨越),则可能需要使用日志记录工具来帮助您将其缩小到发生问题的位置。