2015-04-02 51 views
0

我正在寫一個簡單的命令行Node.js應用程序,其中GLOBAL.thingies正在爲我神祕地結束undefined如何突破觀察變量?

我使用了節點檢查器,並且我可以在任何給定的行上設置斷點,並且對該變量有「監視表達式」,就像我在任何調試器中一樣。但是,我無法找到何時該表達式變爲undefined。如何在變量發生變化時設置斷點?

節點檢查器版本0.9.2。

節點版本0.12.2

是Chrome 41版

回答

1

我不認爲節點檢查有你要求的功能。

有幾個典型的方法來分析這樣的問題,並希望找出發生了什麼。

建構理論什麼,你正在尋找

首先,讓自己如何GLOBAL.thingies可能會突然回來爲undefined列表。在這個特定的原因中,你不僅要尋找GLOBAL.thingies的任務,而且還可能用一個新對象代替整個GLOBAL對象,而該對象只是沒有thingies屬性。

代碼檢查

  1. 做一個grep的所涉及項目中的所有代碼,並檢查和研究能夠改變你的變量的任何代碼。你必須對你的grep有創意,確保你包含所有可能的引用類型。在你的具體例子中,GLOBAL.thingiesGLOBAL["thingies"]可能是不同的訪問方式。在這個原因中,您可能只想搜索thingies的任何可能用途,或者甚至想要包括對GLOBAL的所有引用。

  2. 在每次參考代碼研究它,並決定它是否是一個可疑的問題導致你的問題。

與斷點二進制搜索

  1. 確定哪些高電平操作使得可變改變到不希望的狀態。
  2. 在調試器中進行設置,以便在變量發生變化之前,在該高級操作的開始處有一個斷點。
  3. 在該高級操作中逐步執行頂級操作,以確定該操作中的哪個操作會導致該變量發生更改。
  4. 在變量更改之前,重新啓動以回到步驟2中的位置。在導致變量更改的頂級操作之前設置一個斷點。運行到該斷點。
  5. 現在進入該操作。在麻煩的行爲中逐步找到每個頂層函數,直到找到哪個函數導致變量發生變化。
  6. 再次重複這個過程,直到您最終找到導致變量更改(不調用其他函數)的函數爲止,這個過程再次細化到更細緻的細節。然後遍歷該函數中的每一行代碼,找出它正在改變的地方。

在某些情況下,可以通過記錄日誌記錄相關變量值的日誌語句來簡化二進制搜索的範圍,以便更快速地確定變量何時從好到差,發生了哪些操作 - 將二分搜索的範圍僅限於該操作。如果您在可疑區域有很多異步操作(要跨越很難),則可能需要使用日誌工具來幫助您縮小問題發生的位置。

+0

感謝您的協助。事實證明,我在某個時刻分配給'thingies'(沒有GLOBAL),這必須是同一個對象。 – 2015-04-02 13:22:50