問(wèn)題緣起
看的是別人的項(xiàng)目,希望了解它的某一處的數(shù)據(jù)在哪里組裝出來(lái)的。
它數(shù)據(jù)組裝的觸發(fā)時(shí)機(jī)是在子節(jié)點(diǎn)變化的時(shí)候哑梳,于是我通過(guò)Break on→subtree modifications進(jìn)入了斷點(diǎn)。
現(xiàn)在問(wèn)題是:這些方法都可能多次在其他處調(diào)用,我不可能直接在此處打斷點(diǎn)(那會(huì)組裝的數(shù)據(jù)不是我想要的袱贮,我只能順著這個(gè)堆棧調(diào)用找上去)
舉個(gè)例子,斷點(diǎn)在c函數(shù)里面体啰,沿著往上找進(jìn)入b,但是b沿著網(wǎng)上找就進(jìn)入a了攒巍,可是!;挠隆柒莉!我需要的data屬于這個(gè)堆棧中間調(diào)用過(guò)程,這個(gè)怎么能最快定位到這個(gè)過(guò)程中foo進(jìn)入堆棧的狀態(tài)(因?yàn)槟鞘俏乙粉櫟臄?shù)據(jù)來(lái)源)沽翔?
問(wèn)題分析
chrome的斷點(diǎn)看到的函數(shù)調(diào)用堆棧兢孝,它的搜索線(xiàn)只能看到調(diào)用的當(dāng)前狀態(tài)的,而實(shí)際中間兩個(gè)狀態(tài)之間可能還有很多進(jìn)棧出棧的過(guò)程。這些過(guò)程不能立即體現(xiàn)出來(lái)跨蟹。
利用Restart Frame進(jìn)入中間堆棧狀態(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.
這樣就可以進(jìn)一步追溯兩個(gè)堆棧之間的調(diào)用之間的堆棧過(guò)程了雳殊。
怎么能知道一個(gè)對(duì)象的屬性什么時(shí)候添加進(jìn)來(lái)?
最后發(fā)現(xiàn)數(shù)據(jù)來(lái)源于一個(gè)this.data喷市,如何知道這個(gè)this.data是什么時(shí)候設(shè)置上去的呢相种?
在某個(gè)堆棧中,我對(duì)它某個(gè)對(duì)象上某個(gè)屬性foo在哪里set的特別感興趣品姓,我怎么才能追蹤到這個(gè)屬性在哪里設(shè)置的呢寝并?
只能全局搜索.foo
或["foo"]
或者,"foo",
(萬(wàn)一這個(gè)foo的命名比較常見(jiàn)得搜到什么時(shí)候,要是chrome調(diào)試支持監(jiān)聽(tīng)對(duì)象屬性就厲害了)