專利名稱:用于在程序調(diào)試中跟蹤變量的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及程序調(diào)試,更具體地,本發(fā)明涉及用于在程 序調(diào)試中跟蹤變量的方法和設(shè)備。
背景技術(shù):
在現(xiàn)有的程序調(diào)試技術(shù)中,程序員通常采用跟蹤變量來試圖找 出存在于軟件代碼中的錯(cuò)誤或發(fā)生在編程過程中的錯(cuò)誤。當(dāng)跟蹤變 量時(shí),程序員要查找出哪些特定的源代碼語句修改了該變量,而斷 點(diǎn)在該查找過程中扮演了重要的角色。斷點(diǎn)使得程序在運(yùn)行到該斷 點(diǎn)所插入的某個(gè)位置時(shí)自動(dòng)地停止下來,從而程序員可以對(duì)該位置 處的代碼進(jìn)行分析和判斷以確定該位置處的代碼是否修改了變量。 當(dāng)前,斷點(diǎn)的指定可以通過源代碼的行號(hào)、函數(shù)名和條件等來完成。
圖1示例性示出終止在標(biāo)號(hào)②的一部分c語言程序源代碼,其
中語句斷言(assert)意味著變量bRet的值被改變?yōu)榉橇阒?。程序員 通過該斷言語句確定這是由于源程序中的 一些代碼所造成的錯(cuò)誤 值。為了能夠正確地找出變量bRet的值被改變?yōu)榉橇阒档脑?,?序員需要從該C語言源程序中找出哪些代碼修改了變量bRet。
下面參考圖2,其以圖1中示出的C語言程序源代碼為例來圖示 現(xiàn)有技術(shù)的利用斷點(diǎn)跟蹤變量bRet的調(diào)試過程。在該C語言程序源 代碼中,啟用的斷點(diǎn)以實(shí)心圓["示出,而禁用的斷點(diǎn)以空心圓[o]示 出。為了找出哪些代碼修改了變量bRet,首先在函數(shù)FuncA ()中 涉及變量bRet的標(biāo)號(hào)①的代碼處插入斷點(diǎn)。重新運(yùn)行函數(shù)FuncA() 后并且發(fā)現(xiàn)變量bRet的值在源程序運(yùn)行經(jīng)過標(biāo)號(hào)①的代碼后從0變 到1。禁用標(biāo)號(hào)①的代碼處插入的斷點(diǎn)并且在函數(shù)FuncB ()中涉及 變量bVar的標(biāo)號(hào)③和④的代碼處插入斷點(diǎn)。重新運(yùn)行函數(shù)FuncA(),源程序首先停止在標(biāo)號(hào)③的代碼處并接著停止在標(biāo)號(hào)④的代碼處。
在單步調(diào)試通過標(biāo)號(hào)③和④的代碼之后,發(fā)現(xiàn)變量bVar的值在源程 序運(yùn)行經(jīng)過標(biāo)號(hào)④的代碼后從0變到1。接著禁用在標(biāo)號(hào)①,③和④ 的代碼處的斷點(diǎn)并且在函數(shù)FuncD ()中涉及變量bpln的標(biāo)號(hào)⑥的 代碼處插入斷點(diǎn)。由于標(biāo)號(hào)③的代碼處并沒有改變變量bVar的值, 因此程序員不需要在函數(shù)FuncC ()中的標(biāo)號(hào)⑤的代碼處插入斷點(diǎn)。 重新運(yùn)行函數(shù)FuncA ()并且源程序停止在標(biāo)號(hào)⑥的代碼處,程序 員此時(shí)發(fā)現(xiàn)變量bVar的值在源程序運(yùn)行經(jīng)過標(biāo)號(hào)⑥的代碼后從0變 到1。通過上述插入斷點(diǎn)來跟蹤變量的操作,程序員最終發(fā)現(xiàn)由于函 數(shù)FuncB ()中變量bVar的值的變化而導(dǎo)致在返回給變量bRet時(shí)將 變量bRet的值改變?yōu)榉橇阒怠?br>
從上面的示例性程序調(diào)試操作可以看出,通過借助于斷點(diǎn)的程 序調(diào)試操作,程序員可以找出造成bRet為非零值的真正原因。同時(shí) 也可以看出,這樣的斷點(diǎn)插入可以使程序在每次運(yùn)行中直接停止在 程序員所指定的代碼處,從而有助于程序員在調(diào)試程序中節(jié)省部分 時(shí)間和精力。盡管如此,但是程序員仍需要花費(fèi)較多的時(shí)間和精力 來重復(fù)地運(yùn)行程序以便分析程序中涉及要跟蹤的變量,其函數(shù)調(diào)用 結(jié)構(gòu)和代碼、啟用和禁用斷點(diǎn)、單步調(diào)試代碼以及監(jiān)視程序的執(zhí)行 等。
為了更好的利用斷點(diǎn)來進(jìn)行程序調(diào)試,現(xiàn)有的一些調(diào)試器支持 數(shù)據(jù)斷點(diǎn),從而有助于分析涉及變量的代碼。當(dāng)程序員所指定地址 的數(shù)據(jù)發(fā)生改變時(shí),該數(shù)據(jù)斷點(diǎn)可以使運(yùn)行中的程序停止下來。但 如果數(shù)據(jù)是由于函數(shù)的返回值而被修改,例如如圖1中的標(biāo)號(hào)①的 代碼處,變量bRet正是由于函數(shù)FuncB ()的返回值而被改變,則 用于變量bRet的數(shù)據(jù)斷點(diǎn)僅可定位到標(biāo)號(hào)①的代碼處,這是因?yàn)楹?數(shù)FuncB ()將使用不同的地址來表達(dá)該返回值。此時(shí)程序員就要 靠自己將程序運(yùn)行到函數(shù)FuncB ()內(nèi)并且執(zhí)行上述提到的程序調(diào) 試過程。
因此,需要一種用于在程序調(diào)試中解決上述問題的方法和設(shè)備,其能夠使變量跟蹤更為容易和有效,從而有助于快速查找程序中有 問題的代碼,避免由于變量跟蹤的低效而造成反復(fù)運(yùn)行程序。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種用于能夠更為容易和有效地在程序調(diào) 試中跟蹤變量的方法和設(shè)備。
為了實(shí)現(xiàn)上述目的,本發(fā)明提出 一 種用于在程序調(diào)試中跟蹤變量 的方法,包括對(duì)所述變量進(jìn)行相關(guān)性分析以識(shí)別程序中與該變量相 關(guān)的代碼,在識(shí)別出的與所述變量相關(guān)的代碼處插入斷點(diǎn),以及基 于所述斷點(diǎn)對(duì)程序進(jìn)^"調(diào)試以跟蹤所述變量的變化。
本發(fā)明還提出一種用于在程序調(diào)試中跟蹤變量的設(shè)備,包括代 碼分析裝置,用于對(duì)所述變量進(jìn)行相關(guān)性分析以識(shí)別程序中與該變 量相關(guān)的代碼,斷點(diǎn)處理裝置,用于在識(shí)別出的與所述變量相關(guān)的 代碼處插入斷點(diǎn),以及程序調(diào)試裝置,用于基于所述斷點(diǎn)對(duì)程序進(jìn) 行調(diào)試以跟蹤所述變量的變化。
利用本發(fā)明的方法和設(shè)備,程序員在對(duì)程序進(jìn)行調(diào)試時(shí)通過相 關(guān)性分析能夠較為容易地找到程序中與要跟蹤的變量相關(guān)的代碼, 并通過在相關(guān)的代碼處插入斷點(diǎn)來更為有效地跟蹤變量的變換,從 而能夠快速地找到程序中有問題的代碼,避免了由于程序調(diào)試中跟 蹤變量的低效而造成反復(fù)運(yùn)行程序。
通過以下結(jié)合附圖的說明,并且隨著對(duì)本發(fā)明的更全面了解, 本發(fā)明的其他目的和效果將變得更加清楚和易于理解,其中
圖1是示出示例性C語言程序源代碼的框圖2是示出采用現(xiàn)有技術(shù)對(duì)圖1中的示例性C語言程序源代碼 進(jìn)行調(diào)試的示意的方法流程7圖4A和4B是示意性示出根據(jù)本發(fā)明實(shí)施方式的用于配置斷點(diǎn) 的用戶界面;
圖5是示意性示出根據(jù)本發(fā)明實(shí)施方式生成的跟蹤報(bào)告示圖; 圖6是示出根據(jù)本發(fā)明實(shí)施方式的執(zhí)行相關(guān)性分析從而識(shí)別程
序中與要跟蹤的變量相關(guān)的代碼的流程圖;以及
圖7是示出根據(jù)本發(fā)明實(shí)施方式的用于在程序調(diào)試中跟蹤變量
的設(shè)備的框圖。
在所有的上述附圖中,相同的標(biāo)號(hào)表示具有相同、相似或相應(yīng) 的特征或功能。
具體實(shí)施例方式
以下,將結(jié)合附圖來詳細(xì)描述本發(fā)明的實(shí)施方式。
圖3是示意性示出根據(jù)本發(fā)明實(shí)施方式的用于在程序調(diào)試中跟 蹤變量的方法流程圖。為了清楚起見,在該圖中以實(shí)線框示出實(shí)施 本方法所必需的步驟,以虛線框示出實(shí)施本方法可選的步驟。
如圖所示,在步驟110處,對(duì)要跟蹤的變量進(jìn)行相關(guān)性分析以 識(shí)別程序中與該變量相關(guān)的代碼。在本發(fā)明中,相關(guān)性分析是指在 有效范圍內(nèi)分析與要跟蹤的變量相關(guān)的代碼,這里有效范圍可以由 程序員在程序調(diào)試前指定,例如程序員可以指定該有效范圍是所關(guān) 注的某個(gè)程序文件或程序文件集。另外,有效范圍也可以根據(jù)要跟 蹤的變量的自身屬性來定義,例如,如果要跟蹤的變量的自身屬性 是局部變量,則其有效范圍可以是聲明該局部變量的函數(shù)內(nèi),而當(dāng) 要跟蹤的變量的自身屬性是全局變量時(shí),則其有效范圍可以是處于 多個(gè)函數(shù)間或甚至若干個(gè)程序文件間。這里,與要跟蹤的變量相關(guān) 的代碼可以通過以下類型的定義來確定,這些定義包括
a.直接修改要跟蹤的變量的值的代碼。例如,圖1中標(biāo)號(hào)③的代 碼bVaFFuncC()和標(biāo)號(hào)④的代碼FuncD ( &bVar )直接修改了變量 b Var的值,因此該標(biāo)號(hào)◎和④的代碼是a類型定義下與要跟蹤的變 量bVar相關(guān)的代碼。b. 使用要跟蹤的變量作為函數(shù)參數(shù)的代碼。例如,圖1中的函數(shù) FuncD (int *bpln )使用變量bVar作為參數(shù),因此函數(shù)FuncD (int *bpln )是b類型定義下與要跟蹤的變量bVar相關(guān)的代碼。
c. 使用函數(shù)返回值來修改變量的值的代碼。例如,圖1中的函數(shù) FuncB ()使用變量bVar的返回值來修改要跟蹤的變量bRet的值, 因此函數(shù)FuncB ()是c類型定義下與要跟蹤的變量bRet相關(guān)的代 碼。
d. 通過中間變量間接修改要跟蹤的變量的值的代碼。例如,圖1 中標(biāo)號(hào)⑦的代碼bValuel=bValue2,其將變量bValue2的值賦給中間 變量bValuel,而在標(biāo)號(hào)⑧的代碼bRet=bValuel ,其再將中間變量 bValue 1的值賦給要跟蹤的變量bRet而間接修改變量bRet的值,因 此標(biāo)號(hào)⑦的代碼是d類型定義下與要跟蹤的變量bRet相關(guān)的代碼。
通過上述四種類型的定義,并且結(jié)合要跟蹤的變量的有效范圍 即可確定與要跟蹤的變量相關(guān)的代碼。應(yīng)該理解的是,此處要跟蹤 的變量的有效范圍的確定以及與要跟蹤的變量相關(guān)的代碼的定義僅 僅是示例性而并非限制性的,本領(lǐng)域技術(shù)人員可以想到或采取任意 其他合適的方式來確定要跟蹤的變量的有效范圍以及定義與要跟蹤 的變量相關(guān)的代碼。關(guān)于具體如何執(zhí)行相關(guān)性分析從而找到與要跟 蹤的變量相關(guān)的代碼將稍后結(jié)合圖6的流程圖來詳細(xì)描述。
接著,根據(jù)在步驟110處的相關(guān)性分析,在步驟120處,執(zhí)行 在識(shí)別出的與該要跟蹤的變量相關(guān)的代碼處插入斷點(diǎn)。插入斷點(diǎn)的 方法取決于調(diào)試器的類型。以現(xiàn)有的gdb調(diào)試器為例,該調(diào)試器是 自由軟件并且受到gnu通用公共許可證的保護(hù),程序員可以通過首 先基于將插入到代碼中的斷點(diǎn)來生成相應(yīng)的斷點(diǎn)文件并且接著將該 斷點(diǎn)文件使用"source〈文件名 >"力。載進(jìn)gdb調(diào)試器中來完成斷點(diǎn)插 入的操作。
接著,在可選的步驟130中,可以對(duì)插入到相關(guān)的代碼處的斷 點(diǎn)進(jìn)行配置。為了便于理解如何對(duì)斷點(diǎn)進(jìn)行配置,下面將參考在圖 4A和圖4B中示意性示出的斷點(diǎn)配置的用戶界面,其以圖1的C語言程序源代碼執(zhí)行本發(fā)明的相關(guān)性分析后為例。如圖4A中所示,在
該用戶界面中,"Code,,欄中以單行示出每個(gè)與要跟蹤的變量(如圖1 的C語言程序源代碼中的變量bRet)相關(guān)的代碼,"Enabled"欄可以
是否在此處啟用斷點(diǎn)以跟蹤變量的變化。如果檢驗(yàn)框被選中,例如 圖中bRet=FuncB ()的檢驗(yàn)框被選中,則在該相關(guān)的代碼處插入的 斷點(diǎn)將被啟用,從而在程序運(yùn)行時(shí)基于該處插入的斷點(diǎn)來跟蹤變量 的變化。如果檢驗(yàn)框未被選中,例如圖中bVar二FuncC ()的檢驗(yàn)框 未被選中,則該相關(guān)的代碼處插入的斷點(diǎn)將不被啟用(即禁用), 從而將不會(huì)跟蹤在此處的變量。顯然,通過利用該檢驗(yàn)框,程序員 可以根據(jù)需要選擇性地使用斷點(diǎn)。另外,程序員也可以通過在 "Command"欄的每行中點(diǎn)擊按鈕"Command,,來添加調(diào)試器所支持的 指令,從而在斷點(diǎn)被啟用并且在程序運(yùn)行到達(dá)時(shí),這些指令被調(diào)試 器執(zhí)行,例如當(dāng)相關(guān)的代碼中存在變量bVar時(shí),命令"print bVar"將 會(huì)使得當(dāng)程序調(diào)試運(yùn)行到斷點(diǎn)處時(shí)打印出變量bVar的值。圖4a中 "Description"欄進(jìn)一步提供了要跟蹤的變量所涉及的相關(guān)的代碼的 位置,例如程序文件名以及相關(guān)的代碼的行號(hào)。下面參考圖4B來進(jìn) 行描述,圖4B是圖4A中右擊插入斷點(diǎn)的一個(gè)相關(guān)的代碼行并選擇 斷點(diǎn)屬性(breakpoint Properties )后出現(xiàn)的用戶界面。在該用戶界面 中,程序員可以進(jìn)一步配置斷點(diǎn)的屬性,例如斷點(diǎn)執(zhí)行次數(shù)(hit count)、啟用條件、禁用(未啟用)條件或掛起(Suspend)條件(如 圖4B中所示,當(dāng)條件為"真"時(shí)或當(dāng)條件的值改變時(shí)執(zhí)行斷點(diǎn)的掛起) 的至少一項(xiàng)。當(dāng)然,也可以不執(zhí)行步驟130,即不對(duì)插入到相關(guān)的代 碼處的斷點(diǎn)進(jìn)^f于配置。
接著,在步驟140處,基于插入在相關(guān)的代碼處且啟用的斷點(diǎn) 對(duì)程序進(jìn)行調(diào)試,記錄斷點(diǎn)處變量的值以跟蹤該變量的變化。接著, 在完成執(zhí)行程序調(diào)試以跟蹤變量的變化后,在可選的步驟150處, 生成該變量的跟蹤報(bào)告,例如圖5中示意性示出的跟蹤報(bào)告示圖。 該跟蹤報(bào)告包括變量值的改變歷史、函數(shù)調(diào)用關(guān)系以及相關(guān)程序代碼的描述等。對(duì)于結(jié)構(gòu)變量,值將被示為包括其所有元素的當(dāng)前調(diào) 試值。報(bào)告可以以XML格式的文件進(jìn)行輸出和保存??蛇x地,在執(zhí)
行完生成該變量的跟蹤報(bào)告的步驟150后,可以執(zhí)行下面的步驟(圖 3中未示出),即根據(jù)需要對(duì)基于相關(guān)性分析已經(jīng)插入在相關(guān)代碼處
的斷點(diǎn)進(jìn)行進(jìn)一步地配置,例如對(duì)禁用的斷點(diǎn)進(jìn)行啟用、對(duì)已經(jīng)啟 用的斷點(diǎn)進(jìn)行禁用、對(duì)斷點(diǎn)的執(zhí)行次數(shù)進(jìn)行修改,或設(shè)置斷點(diǎn)在程
序調(diào)試中啟用或禁用的新的條件等。從而在再次進(jìn)行的步驟140的 程序調(diào)試時(shí),對(duì)要跟蹤的變量進(jìn)行進(jìn)一步跟蹤以找到導(dǎo)致程序出現(xiàn) 錯(cuò)誤的代碼。
下面將參考圖6來詳細(xì)描述執(zhí)行相關(guān)性分析的操作流程。在步驟 600處,首先設(shè)置將要跟蹤的變量以及其有效范圍。接著在步驟605處 開始讀取第一行代碼。在步驟610處,首先判斷該讀取的代碼是否直接 修改了跟蹤的變量的值,如果是,則在步驟620處,將該讀取的代碼記 錄為與跟蹤的變量相關(guān)的代碼。如果該讀取的代碼沒有直接修改跟蹤的 變量的值,則在步驟615處判斷該讀取的代碼是否間接修改了跟蹤的變 量的值,例如通過中間變量的方式修改了跟蹤的變量的值,如果該讀取 的代碼間接修改了跟蹤的變量的值,則同樣在步驟620處將該讀取的代 碼記錄為與跟蹤的變量相關(guān)的代碼。如果該讀取的代碼沒有間接修改跟 蹤的變量值,則在步驟625處,判斷在該讀取的代碼中,跟蹤的變量是 否為函數(shù)的參數(shù),如果跟蹤的變量是函數(shù)的參數(shù),則在步驟630處,將 該讀取的代碼記錄為與跟蹤的變量相關(guān)的代碼,并且在步驟635處,將 跟蹤的變量改變?yōu)楹瘮?shù)體內(nèi)變量,即此時(shí)跟蹤的變量是該函數(shù)的參數(shù), 并且將有效范圍改變?yōu)樵摵瘮?shù)體內(nèi)。接著,流程返回到步驟605,開始 執(zhí)行該函數(shù)體內(nèi)以所述的參數(shù)為要跟蹤的變量的跟蹤操作。否則在步驟 640處,接著判斷在該讀取的代碼中,跟蹤的變量是否被函數(shù)的返回值 所賦值,如果跟蹤的變量被函數(shù)的返回值賦值,則同樣執(zhí)行上面的步驟 630和635,即記錄該讀取的代碼為相關(guān)的代碼,并且接著改變要跟蹤 的變量為函數(shù)體內(nèi)變量,即此時(shí)跟蹤的變量是該函數(shù)利用其傳送返回值 的變量,該函數(shù)體內(nèi)為有效范圍。接著流程也返回到步驟605開始函數(shù)體內(nèi)的跟蹤操作。否則就讀取下一行代碼,并接著判斷是否達(dá)到當(dāng)前有 效范圍的尾部,如果沒有到達(dá),則流程返回到步驟610繼續(xù)執(zhí)行操作, 否則接著判斷跟蹤是否為函數(shù)體內(nèi)的跟蹤,如果是函數(shù)體內(nèi)的跟蹤,則
在步驟660,設(shè)定跟蹤的變量和有效范圍為改變前的要跟蹤的變量和有
效范圍,即從當(dāng)前的函數(shù)體內(nèi)跟蹤跳出返回到進(jìn)入該函數(shù)體前的有效范
圍并且恢復(fù)與該有效范圍相應(yīng)的要跟蹤的變量。接著前進(jìn)到步驟645讀 取下一行程序代碼,并開始循環(huán)地執(zhí)行上面的操作??梢钥闯雒看萎?dāng) 相關(guān)的函數(shù)被分析時(shí),新的分析處理將在函數(shù)內(nèi)部執(zhí)行。每次函數(shù) 返回時(shí),用于該函數(shù)調(diào)用的處理被終止。如果函數(shù)是迭代的,則針 對(duì)相同的函數(shù)可能存在多次處理。通過以上的操作,可以在有效范 圍內(nèi)找到與要跟蹤的變量相關(guān)的代碼。
現(xiàn)在將參考圖7描述根據(jù)本發(fā)明實(shí)施方式的用于在程序調(diào)試中 跟蹤變量的設(shè)備。如圖中所示,本發(fā)明的設(shè)備包括代碼分析裝置710、 斷點(diǎn)處理裝置720以及程序調(diào)試裝置740,并且可選地包括跟蹤配置 裝置730和報(bào)告生成裝置750。為了便于理解,在該圖中用虛線框表 示出該可選的兩個(gè)裝置。下面詳細(xì)描述本發(fā)明的設(shè)備的操作過程。 在代碼分析裝置710中,對(duì)要跟蹤的變量進(jìn)行相關(guān)性分析以識(shí)別程 序中與該變量相關(guān)的代碼。關(guān)于如何進(jìn)行相關(guān)性分析以識(shí)別程序中 與該變量相關(guān)的代碼已經(jīng)在圖3的步驟110中進(jìn)行了詳細(xì)的描述, 為了簡明起見,在此省略。接著斷點(diǎn)處理裝置720基于代碼分析裝 置710所識(shí)別出的與所述變量相關(guān)的代碼,在該相關(guān)的代碼處插入 斷點(diǎn)。接著可選的跟蹤配置裝置730對(duì)斷點(diǎn)處理裝置720插入到相 關(guān)的代碼處的斷點(diǎn)進(jìn)行配置,該配置包括啟用或禁用斷點(diǎn)以便選擇 性地使用斷點(diǎn),并且跟蹤配置裝置720還可以對(duì)斷點(diǎn)執(zhí)行次數(shù)以及 啟用條件、禁用條件或掛起條件的至少一項(xiàng)進(jìn)行配置,例如圖4A和 圖4B中所示出的。程序調(diào)試裝置740接著基于插入到相關(guān)的代碼處 的斷點(diǎn)對(duì)程序進(jìn)行調(diào)試以跟蹤變量的變化。最后,可選地,報(bào)告生 成裝置750在所述程序調(diào)試裝置740調(diào)試程序后,生成所述變量的 跟蹤報(bào)告,如圖5中所示出的。從而更為直觀地向程序員提供跟蹤
12的變量的值的變化歷史??蛇x地,也可以在報(bào)告生成裝置750完成
操作后,再次利用跟蹤配置裝置720來根據(jù)需要對(duì)基于相關(guān)性分析
已經(jīng)插入在相關(guān)的代碼處的斷點(diǎn)進(jìn)行進(jìn)一 步的配置,例如對(duì)禁用的 斷點(diǎn)進(jìn)行啟用、對(duì)已經(jīng)啟用的斷點(diǎn)進(jìn)行禁用、對(duì)斷點(diǎn)的執(zhí)行次數(shù)進(jìn) 行修改,或設(shè)置斷點(diǎn)在程序調(diào)試中啟用或禁用的新的條件等。從而 在再次進(jìn)行程序調(diào)試時(shí),對(duì)要跟蹤的變量進(jìn)行進(jìn)一步跟蹤以找到導(dǎo) 致程序出現(xiàn)錯(cuò)誤的代碼。
應(yīng)當(dāng)注意,為了使本發(fā)明更容易理解,上面的描述省略了對(duì)于本 領(lǐng)域的技術(shù)人員來說是公知的、并且對(duì)于本發(fā)明的實(shí)現(xiàn)可能是必需 的更具體的 一 些#支術(shù)細(xì)節(jié)。
提供本發(fā)明的說明書的目的是為了說明和描述,而不是用來窮舉 或?qū)⒈景l(fā)明限制為所公開的形式。對(duì)本領(lǐng)域的普通技術(shù)人員而言, 許多修改和變更都是顯而易見的。
其實(shí)際應(yīng)用,并使本領(lǐng)域普通技術(shù)人員明白,在不脫離本發(fā)明實(shí)質(zhì) 的前提下,所有修改和變更均落入由權(quán)利要求所限定的本發(fā)明的保 護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種用于在程序調(diào)試中跟蹤變量的方法,包括以下步驟對(duì)所述變量進(jìn)行相關(guān)性分析以識(shí)別程序中與該變量相關(guān)的代碼,在識(shí)別出的與所述變量相關(guān)的代碼處插入斷點(diǎn),以及基于所述斷點(diǎn)對(duì)程序進(jìn)行調(diào)試以跟蹤所述變量的變化。
2. 根據(jù)權(quán)利要求1所述的方法,其中相關(guān)性分析包括在所述變量的有效范圍內(nèi)分析與該變量相關(guān)的代碼。
3. 根據(jù)權(quán)利要求2所述的方法,其中當(dāng)所述變量是局部變量時(shí),該變量的有效范圍是聲明該局部變量的函數(shù)內(nèi),而當(dāng)所述變量是全局變量時(shí),該變量的有效范圍是涉及該變量的多個(gè)函數(shù)間或多個(gè)程序文件間。
4. 根據(jù)權(quán)利要求2所述的方法,其中與該變量相關(guān)的代碼是在所述有效范圍內(nèi)滿足下列各項(xiàng)之一的代碼,包括直接修改變量的值的代碼、使用變量作為參數(shù)的代碼、使用返回值來修改變量的值的代碼以及使用中間變量來修改變量的值的代碼。
5. 根據(jù)權(quán)利要求1所述的方法,其中包括對(duì)插入到所述相關(guān)的代碼處的斷點(diǎn)進(jìn)行配置。
6. 根據(jù)權(quán)利要求5所述的方法,其中對(duì)插入到所述相關(guān)的代碼處的斷點(diǎn)進(jìn)行配置包括啟用或禁用斷點(diǎn)以實(shí)現(xiàn)選擇性地使用所述斷點(diǎn)。
7. 根據(jù)權(quán)利要求5所述的方法,其中對(duì)插入到所述相關(guān)的代碼處的斷點(diǎn)進(jìn)行配置包括對(duì)斷點(diǎn)執(zhí)行次數(shù)以及啟用條件、禁用條件或掛起條件的至少 一 項(xiàng)進(jìn)行配置。
8. 根據(jù)權(quán)利要求1所述的方法,其中在基于所述斷點(diǎn)對(duì)程序進(jìn)行調(diào)試后,生成所述變量的跟蹤報(bào)告。
9. 根據(jù)權(quán)利要求8所述的方法,其中所述跟蹤報(bào)告包括變量值的改變歷史、函數(shù)調(diào)用關(guān)系以及所述相關(guān)的代碼的描述中的至少一項(xiàng)。
10. —種用于在程序調(diào)試中跟蹤變量的設(shè)備,包括代碼分析裝置,用于對(duì)所述變量進(jìn)行相關(guān)性分析以識(shí)別程序中與該變量相關(guān)的代碼,斷點(diǎn)處理裝置,用于在識(shí)別出的與所述變量相關(guān)的代碼處插入斷點(diǎn),以及程序調(diào)試裝置,用于基于所述斷點(diǎn)對(duì)程序進(jìn)行調(diào)試以跟蹤所述變量的變化。
11. 根據(jù)權(quán)利要求IO所述的設(shè)備,其中代碼分析裝置在所述變量的有效范圍內(nèi)分析與該變量相關(guān)的代碼。
12. 根據(jù)權(quán)利要求11所述的設(shè)備,其中當(dāng)所述變量是局部變量時(shí),該變量的有效范圍是聲明該局部變量的函數(shù)內(nèi),而當(dāng)所述變量是全局變量時(shí),該變量的有效范圍是涉及該變量的多個(gè)函數(shù)間或多個(gè)程序文件間。
13. 根據(jù)權(quán)利要求11所述的設(shè)備,其中與該變量相關(guān)的代碼是在所述有效范圍內(nèi)滿足下列各項(xiàng)之一的代碼,包括直接修改變量的值的代碼、使用變量作為參數(shù)的代碼、使用返回值來修改變量的值的代碼以及使用中間變量來修改變量的值的代碼。
14. 根據(jù)權(quán)利要求10所述的設(shè)備,其中所述設(shè)備進(jìn)一步包括跟蹤配置裝置,用于對(duì)插入到所述相關(guān)的代碼處的斷點(diǎn)進(jìn)行配置。
15,根據(jù)權(quán)利要求14所述的設(shè)備,其中跟蹤配置裝置對(duì)插入到所述相關(guān)的代碼處的斷點(diǎn)進(jìn)行配置包括啟用或禁用斷點(diǎn)以實(shí)現(xiàn)選擇性地使用所述斷點(diǎn)。
16. 根據(jù)權(quán)利要求14所述的設(shè)備,其中跟蹤配置裝置對(duì)插入到所述相關(guān)的代碼處的斷點(diǎn)進(jìn)行配置包括對(duì)斷點(diǎn)執(zhí)行次數(shù)以及啟用條件、禁用條件或掛起條件的至少一項(xiàng)進(jìn)行配置。
17. 根據(jù)權(quán)利要求10所述的設(shè)備,其中所述設(shè)備進(jìn)一步包括報(bào)告生成裝置,用于在所述程序調(diào)試裝置對(duì)程序進(jìn)行調(diào)試后,生成所述變量的跟蹤報(bào)告。
18. 根據(jù)權(quán)利要求17所述的設(shè)備,其中所述變量的跟蹤報(bào)告包括變量值的改變歷史、函數(shù)調(diào)用關(guān)系以及所述相關(guān)的代碼的描述中的至少一項(xiàng)。
全文摘要
本發(fā)明提供一種用于在程序調(diào)試中跟蹤變量的方法和設(shè)備,其中該方法包括對(duì)變量進(jìn)行相關(guān)性分析以識(shí)別程序中與該變量相關(guān)的代碼,在識(shí)別出的與變量相關(guān)的代碼處插入斷點(diǎn),以及基于斷點(diǎn)對(duì)程序進(jìn)行調(diào)試以跟蹤變量的變化。所述設(shè)備包括代碼分析裝置,用于對(duì)變量進(jìn)行相關(guān)性分析以識(shí)別程序中與該變量相關(guān)的代碼,斷點(diǎn)處理裝置,用于在識(shí)別出的與變量相關(guān)的代碼處插入斷點(diǎn),以及程序調(diào)試裝置,用于基于斷點(diǎn)對(duì)程序進(jìn)行調(diào)試以跟蹤變量的變化。利用本發(fā)明的方法和設(shè)備,程序員在對(duì)程序進(jìn)行調(diào)試時(shí)通過相關(guān)性分析能夠較為容易地找到與要跟蹤的變量相關(guān)的代碼,并通過在相關(guān)的代碼處插入斷點(diǎn)來更為有效地跟蹤變量的變換而無需反復(fù)運(yùn)行待調(diào)試的程序。
文檔編號(hào)G06F11/36GK101639805SQ200810145140
公開日2010年2月3日 申請(qǐng)日期2008年7月31日 優(yōu)先權(quán)日2008年7月31日
發(fā)明者毅 姚, 黎 姜, 岳治宇, 王守慧, 紅 許 申請(qǐng)人:國際商業(yè)機(jī)器公司