談?wù)撊绾握{(diào)用Visual Studio繼承樹(shù)窗口
經(jīng)過(guò)長(zhǎng)時(shí)間學(xué)習(xí)調(diào)用Visual Studio繼承樹(shù)窗口,于是和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。寫程序離不開(kāi)調(diào)試,調(diào)試離不開(kāi)理清程序的執(zhí)行流程。在以前的Visual Studio版本中,我們幾乎都是調(diào)試的時(shí)候通過(guò)調(diào)用棧來(lái)查找函數(shù)間的調(diào)用關(guān)系,幫助調(diào)試的。調(diào)用棧雖然好用,但是只能在調(diào)試時(shí)使用,同時(shí)也只能串行,只有一條執(zhí)行路徑。另外,隨著現(xiàn)代應(yīng)用程序越來(lái)越復(fù)雜,調(diào)用棧已經(jīng)無(wú)法滿足我們分析程序邏輯的需要。所以在Visual Studio 2010中,微軟為我們提供了新的程序邏輯分析工具:調(diào)用繼承樹(shù)(Call Hierarchy)窗口。
#t#體驗(yàn)調(diào)用Visual Studio繼承樹(shù)窗口給我們帶來(lái)的便利,我們可以打開(kāi)Visual Studio 2010 CTP虛擬機(jī)中自帶的示例項(xiàng)目DinnerNow – Management。在解決方案瀏覽器中,我們雙擊PSWorkflowMonitor.cs這個(gè)文件,將其在代碼編輯器中打開(kāi)。然后找到其中的 LoadWorkflowInstance函數(shù),在這個(gè)函數(shù)上右鍵單擊,在彈出的上下文菜單中選擇“View Call Hierarchy”:
這樣,我們就可以打開(kāi)LoadWorkflowInstance函數(shù)的調(diào)用Visual Studio繼承樹(shù)窗口:
在調(diào)用Visual Studio繼承樹(shù)窗口中,我們可以像“爬樹(shù)”一樣,在這棵調(diào)用繼承樹(shù)的各個(gè)節(jié)點(diǎn)和對(duì)應(yīng)的代碼之間任意跳轉(zhuǎn):
◆跳轉(zhuǎn)到代碼
在調(diào)用Visual Studio繼承樹(shù)窗口中,我們可以在函數(shù)上點(diǎn)擊右鍵,選擇彈出菜單中的“Go To Definition”,就可以直接跳轉(zhuǎn)到相應(yīng)的代碼。
同時(shí)我們可以注意到調(diào)用繼承窗口的右邊是“Detail Pane”,其中顯示了當(dāng)前選中函數(shù)所有的調(diào)用位置,我們只要雙擊其中的調(diào)用記錄,就可以跳轉(zhuǎn)到相應(yīng)的函數(shù)調(diào)用位置。
◆創(chuàng)建或者刪除調(diào)用繼承樹(shù)
當(dāng)程序比較復(fù)雜的時(shí)候,我們的調(diào)用繼承樹(shù)也會(huì)“枝繁葉茂”,這樣不利于我們的分析。在這種情況下,我們就可以把一個(gè)根節(jié)點(diǎn)中我們感興趣的子節(jié)點(diǎn)設(shè)置為新的根節(jié)點(diǎn),這樣可以簡(jiǎn)化調(diào)用繼承的深度,更加利于我們的分析。
◆改變調(diào)用繼承搜索的范圍
默認(rèn)情況下,調(diào)用繼承會(huì)搜索整個(gè)解決方案中的調(diào)用情況,如果我們的解決方案比較復(fù)雜,這就會(huì)使得調(diào)用繼承樹(shù)非常復(fù)雜,引入很多意義不大的調(diào)用關(guān)系。為了簡(jiǎn)化調(diào)用繼承樹(shù),我們可以改變調(diào)用繼承的搜索范圍,將其限制在解決方案,當(dāng)前項(xiàng)目或者當(dāng)前文檔。