問題緣起
看的是別人的項目,希望了解它的某一處的數(shù)據(jù)在哪里組裝出來的。
它數(shù)據(jù)組裝的觸發(fā)時機是在子節(jié)點變化的時候,于是我通過Break on→subtree modifications進入了斷點。
現(xiàn)在問題是:這些方法都可能多次在其他處調(diào)用,我不可能直接在此處打斷點(那會組裝的數(shù)據(jù)不是我想要的,我只能順著這個堆棧調(diào)用找上去)
舉個例子,斷點在c函數(shù)里面,沿著往上找進入b,但是b沿著網(wǎng)上找就進入a了,可是!!!我需要的data屬于這個堆棧中間調(diào)用過程,這個怎么能最快定位到這個過程中foo進入堆棧的狀態(tài)(因為那是我要追蹤的數(shù)據(jù)來源)?
問題分析
chrome的斷點看到的函數(shù)調(diào)用堆棧,它的搜索線只能看到調(diào)用的當(dāng)前狀態(tài)的,而實際中間兩個狀態(tài)之間可能還有很多進棧出棧的過程。這些過程不能立即體現(xiàn)出來。
利用Restart Frame進入中間堆棧狀態(tài)
When at a breakpoint inside debugger mode, you can conveniently restart the current stack frame by right clicking the call stack and selecting Restart Frame
. This can be useful to inspect the current frame without reloading the page with a new breakpoint.
這樣就可以進一步追溯兩個堆棧之間的調(diào)用之間的堆棧過程了。
怎么能知道一個對象的屬性什么時候添加進來?
最后發(fā)現(xiàn)數(shù)據(jù)來源于一個this.data,如何知道這個this.data是什么時候設(shè)置上去的呢?
在某個堆棧中,我對它某個對象上某個屬性foo在哪里set的特別感興趣,我怎么才能追蹤到這個屬性在哪里設(shè)置的呢?
只能全局搜索.foo
或["foo"]
或者,"foo",
(萬一這個foo的命名比較常見得搜到什么時候,要是chrome調(diào)試支持監(jiān)聽對象屬性就厲害了)