[VS2010]Call Hierachy - 終於可以trace implement class了

  • 6497
  • 0

[VS2010]Call Hierachy - 終於可以trace implement class了

前言

之前在trace code或debug的時候,很常會遇到一個讓人苦惱的情況,
就是『移至定義』只能移到interface上,要直接移至implement的class上,只能用其他方式來尋找,(例如ctrl+shift+f)。
更甚至只能把implement的class名字命的跟interface像一點,一切只為了『方便』而犧牲了意義。

現在,VS2010提供了一個功能,叫『Call Hierachy』,可以輕易的解決這個問題,
而不必在自己用一堆搜尋功能來trace code。
 

Play it

可以在toolbar上的View裡面,看到『Call Hierachy』的選項,也可以在某個特定的method上,點選滑鼠右鍵,找到『View Call Hierachy』。

menuOnTop menu


介紹這個功能之前,我們先來說明一下sample code,
現在有一個interface叫做IQueryCodeService,有兩個class實作這個介面,各自為QueryCodeService與HierachyTestQueryCodeService。
我們在一般的程式裡面,呼叫IQueryCodeService上的GetStatusDescByCode()。

  • 實作interface
    • ImplService1 
    • ImplService2
  • 呼叫Interface上的GetStatusDescByCode()
  • UsingInterface


接著,我們在GetStatusDescByCode()上按滑鼠右鍵,呼叫View Call Hierachy,可以看到IQueryCodeService.GetStatusDescByCode()的相關call hierachy information。
有兩個class各自Implements IQueryCodeService上的GetStatusDescByCode(),

  1. Core.Service.HierachyTestQueryCodeService
  2. Core.Service.QueryCodeService

ViewImplementByHierachy


除了可以看到Implements以外,還可以看到這個method,裡面有呼叫哪一些method,也就是Calls From。
也可以看到有哪一些method呼叫目前這個method,也就是Calls To。
 

CallsToInformationAndLocation 
CallsToInformationAndLocation2 


除了看到有哪幾個地方呼叫這個method以外,
右邊的Call Sites與Location,更可以知道那一行呼叫的code長怎樣,在哪一支程式的第幾行。
double click後,就可以直接移至該行。

整體來說,則如下圖所示:

CallHierachyAndRelativeInfo

黃色的部分,是call stack,可以一路從Preseneation layer追到Business Logic layer,再追到Data Access layer,而不會被interface所阻擋。
當想重整某個method時,可以直接從Call Hierachy看到會有哪一些相關的method受到影響。

如果觀看的對象是abstract class,則會顯示Overrides的成員。

abstract


結論

其實我一直覺得trace code被interface擋著,是一件雖合理,但IDE應該要克服的事。
我是在VS2010中不經意的找到這功能,我也一直以為是之前自己太混,不知道有這麼好用的功能。
後來回去找VS2008,才知道,這功能真的到VS2010才有。

雖然只是個看起來不起眼的小功能,但對trace code的幫助真的很大。


blog 與課程更新內容,請前往新站位置:http://tdd.best/