WOPM (Watch Object Pool Module)
GRADE F: Please follow the template and WHO ARE you ?
edited by neo0093
Introduction
wop是DIVA儲存被視覺化變數的資料結構,當使用者在Mapping dialog裡將變數與VM的屬性作一個連結時,此時DIVA會產生一個WOP,WOP會隨時觀察變數的變化,當變數隨著程式的執行而 產生變化時,VM的屬性會隨著WOP不斷的更新而有所改變。
Definition
WOP(Watch Object Pool)
WOP是一個table儲存被visualize的變數資訊,包含變數名稱、變數內容、物件位置(hash code)及變數種類等。每個WOP變數都是當作一個table的entry儲存,基底的class為
WOP_Entry,由不同type的wop_entry類別繼承。
WOP_TYPE
依據被觀察的變數種類而有不同的wop_entry類別primitive (int,double,float,string,bool,char)、refernce (ref,Array_ref)、heap(obj、array)。
primitive type: 主要紀錄該變數種類的value,ex:WOP_INT_ENTRY就用一個int來紀錄該變數的值。
referece type: 主要紀錄該reference變數的address,ex:A@ac00845(hash code),被指到的物件若沒被執行unfold(derefernce)的指令則不會被加入WOP。
heap type : 簡單的比較一下Ref跟Heap,Ref相當於pointer,而Heap相當於該物件在記憶體中的實體通常,實體中會再包含一些子元素,此外,Heap Entry必定是經由unfold一個
Ref_Entry而出現的。obj跟array都是繼承WOP_HEAP_ENTRY,兩者相似度極高,主要差異在obj儲存的變數種類不唯一而array儲存的是單一類別。
WOPM(Watch Object Pool Module)
wop_type_entry 是組成wop的最基本資料結構,此模組有一個vector儲存所有的wop物件,主要的operation如下:
void WOPM::addEntry(WOP_Entry *entry) 將wop_entry加入vector
void WOPM::removeEntry(WOP_Entry *entry) 將wop_entry從vector中移除
WOP_Entry* WOPM::searchEntrybyName(string name, string type) 用變數的名稱及type找出對應的wop_entry
WOP_Entry* WOPM::check_existing_objects(std::string _value) 檢查某變數是否已有對應的wop_entry
void WOPM::updateAll() 將vector裡所有inscope的wop值做更新
void WOPM::updateDescents(WOP_Entry *refen) 將某refernce type的descent作update
WOP_Entry* WOPM::createEntry(string name,string type, WOP_Entry *parent, WOP_Entry* from, bool top, string vartype, string addr)
依據傳入的參數建立對應type的wop_entry
Purpose of this trace
Scenario