亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種計(jì)算機(jī)程序的調(diào)試方法

文檔序號:6575333閱讀:170來源:國知局
專利名稱:一種計(jì)算機(jī)程序的調(diào)試方法
技術(shù)領(lǐng)域
本發(fā)明屬于計(jì)算機(jī)軟件開發(fā)技術(shù)領(lǐng)域,尤其涉及一種計(jì)算機(jī)程序的調(diào)試 方法。
背景技術(shù)
程序調(diào)試是計(jì)算機(jī)軟件開發(fā)的重要環(huán)節(jié)之一,其目的是發(fā)現(xiàn)程序代碼中 存在的各種問題,提高程序運(yùn)行的正確性、安全性、可靠性。傳統(tǒng)的程序調(diào)
試方法采用斷點(diǎn)設(shè)置與代碼跟蹤技術(shù),如VC+十、Borland C十+等。對于直接 編譯型語言(如C/C++, Java等),編寫的是直接執(zhí)行的程序,由于程序的 執(zhí)行流程比較單一,這種方法是比較有效的。然而,對于一些執(zhí)行過程復(fù)雜 多變、具有不確定性的程序,同一段代碼在不同系統(tǒng)運(yùn)行條件下可能正常也 可能出現(xiàn)故障,僅僅發(fā)現(xiàn)故障代碼的位置常常不能準(zhǔn)確定位故障產(chǎn)生的原因。 采用代碼跟蹤的方法既繁瑣又費(fèi)時(shí),特別是當(dāng)程序在同一段代碼上執(zhí)行了大 量流程后產(chǎn)生故障,斷點(diǎn)追蹤的方法幾乎是無法定位故障的。因此,采用快 速有效的故障定位技術(shù),對于提高復(fù)雜過程計(jì)算機(jī)程序的調(diào)試效率和改進(jìn)代 碼質(zhì)量具有十分重要的意義。

發(fā)明內(nèi)容
本發(fā)明的目的在于,提供一種計(jì)算機(jī)程序的調(diào)試方法,用于解決復(fù)雜運(yùn)行 流程的計(jì)算機(jī)程序無法快速準(zhǔn)確定位故障的問題。
本發(fā)明的技術(shù)方案是, 一種計(jì)算機(jī)程序的調(diào)試方法,其特征是所述方法包括下列步驟
步驟1:建立在計(jì)算機(jī)程序所有運(yùn)行流程中均可使用的記錄流程信息的數(shù) 據(jù)結(jié)構(gòu);
歩驟2:被調(diào)試的計(jì)算機(jī)程序運(yùn)行,判斷是否產(chǎn)生故障,如果是,則記錄 故障代碼位置并執(zhí)行步驟3;否則,執(zhí)行步驟9;
步驟3:在故障代碼前面,加入用于添加流程信息的代碼,通過添加流程 信息的代碼,刷新數(shù)據(jù)結(jié)構(gòu)中記錄的流程信息;
步驟4:在故障代碼處,加入用于監(jiān)控流程信息的代碼,通過監(jiān)控流程信 息的代碼,獲取特定的流程信息;
步驟5:重新運(yùn)行被調(diào)試的計(jì)算機(jī)程序,當(dāng)被調(diào)試的計(jì)算機(jī)程序再次在故 障代碼處終止時(shí),獲取監(jiān)控流程信息;
步驟6:根據(jù)監(jiān)控流程信息,在故障代碼處的前面插入流程信息的追蹤代
碼;
歩驟7:再次運(yùn)行被調(diào)試的計(jì)算機(jī)程序,使被調(diào)試的計(jì)算機(jī)程序在發(fā)生故 障時(shí),暫停于故障代碼前的追蹤代碼處;
步驟8:從追蹤代碼開始,采用常用的步進(jìn)方式,繼續(xù)執(zhí)行被調(diào)試的計(jì)算 機(jī)程序,確定故障原因并作相應(yīng)修改;之后,返回步驟2;
步驟9:在修改之后,刪除用于監(jiān)控流程信息的監(jiān)控代碼。
所述數(shù)據(jù)結(jié)構(gòu)為全局性數(shù)據(jù)結(jié)構(gòu)。
所述數(shù)據(jù)結(jié)構(gòu)獨(dú)立于所述計(jì)算機(jī)程序。
所述數(shù)據(jù)結(jié)構(gòu)記錄的流程信息包括遞規(guī)算法的層次計(jì)數(shù)、條件表達(dá)式計(jì) 數(shù)、任務(wù)計(jì)數(shù)、任務(wù)分解方法計(jì)數(shù)、動作計(jì)數(shù)、計(jì)劃計(jì)數(shù)。
所述數(shù)據(jù)結(jié)構(gòu)記錄的流程信息可以根據(jù)被調(diào)試的計(jì)算機(jī)程序進(jìn)行擴(kuò)展。 所述特定的流程信息根據(jù)被調(diào)試的計(jì)算機(jī)程序預(yù)先設(shè)定。 本發(fā)明能夠快速準(zhǔn)確的定位故障代碼和發(fā)生故障時(shí)的運(yùn)行流程,方便地確定程序運(yùn)行故障的產(chǎn)生原因,提高代碼修改的質(zhì)量和效率。


圖1是流程信息數(shù)據(jù)結(jié)構(gòu)與被調(diào)試計(jì)算機(jī)程序的關(guān)系圖; 圖2是流程信息的數(shù)據(jù)結(jié)構(gòu)示意圖; 圖3是智能規(guī)劃軟件系統(tǒng)的原理圖; 圖4是HTN搜索的流程樹結(jié)構(gòu);
圖5是本發(fā)明實(shí)施例提供的計(jì)算機(jī)程序的調(diào)試方法流程圖。
具體實(shí)施例方式
下面結(jié)合附圖,對優(yōu)選實(shí)施例作詳細(xì)說明。應(yīng)該強(qiáng)調(diào)的是,下述說明僅 僅是示例性的,而不是為了限制本發(fā)明的范圍及其應(yīng)用。
木發(fā)明以層次任務(wù)網(wǎng)(Hierarchical Task Network,簡稱HTN)智能規(guī)劃器
程序的調(diào)試為實(shí)施例對本發(fā)明作進(jìn)-'歩說明。
智能規(guī)劃問題(Artificial Intelligent planning)是人工智能研究的重要問題 之一(參考文獻(xiàn)宋經(jīng)#7, J^達(dá)^, /轉(zhuǎn)一乎,^^,^^^fi 綜述一一個(gè)源^7應(yīng) y^游裸身,,H賓一統(tǒng),^見^^7, 2 O),其目的是根據(jù)給定的初始世界狀 態(tài)(initial world state)和給定的目標(biāo)狀態(tài)(goal state)或目標(biāo)任務(wù)(goal task), 根據(jù)預(yù)先定義的動作集合求取實(shí)現(xiàn)目標(biāo)的動作序列,這個(gè)求得的動作序列就形 成一個(gè)計(jì)劃(plan)。 HTN規(guī)劃是一種面向工程應(yīng)用提出的實(shí)用智能規(guī)劃技術(shù), 通過任務(wù)的逐層分解實(shí)現(xiàn)計(jì)劃的生成,能夠極大地改善規(guī)劃器求解性能。HTN 智能規(guī)劃算法的程序編寫和執(zhí)行與傳統(tǒng)的程序編寫的一個(gè)重要不同是傳統(tǒng)的 編程方法編寫的程序其執(zhí)行的流程是預(yù)先設(shè)計(jì)好的,流程分支的數(shù)量不太多、 容易預(yù)見,傳統(tǒng)的斷點(diǎn)追蹤技術(shù)比較容易控制。而HTN規(guī)劃算法在運(yùn)行時(shí)受 規(guī)劃域(即一種驅(qū)動模型)中不確定的任務(wù)分解方法(method)和問題實(shí)例(problem instance)的影響,求解流程存在許多不確定的分支,尤其是當(dāng)問題
規(guī)模比較大時(shí),求解流程分支的不確定性變化數(shù)量非常龐大。當(dāng)算法執(zhí)行出現(xiàn)
異常時(shí),用傳統(tǒng)的設(shè)置斷點(diǎn)和跟蹤代碼執(zhí)行情況的調(diào)試方法判斷故障原因是十
分困難的。采用本發(fā)明提出的調(diào)試方法能有效地進(jìn)行這類系統(tǒng)的開發(fā)調(diào)試。
圖1是流程信息數(shù)據(jù)結(jié)構(gòu)與被調(diào)試計(jì)算機(jī)程序的關(guān)系圖。記錄運(yùn)行流程
信息的數(shù)據(jù)結(jié)構(gòu)獨(dú)立于被調(diào)試計(jì)算機(jī)程序單獨(dú)構(gòu)建。該數(shù)據(jù)結(jié)構(gòu)通過在被調(diào) 試的計(jì)算機(jī)程序中加入的用于添加流程信息的代碼段不斷刷新,記錄流程的
相關(guān)信息。流程信息監(jiān)控代碼段則獲取特定的流程信息,為流程的追蹤提供 斷點(diǎn)信息。所述特定的流程信息根據(jù)被調(diào)試的計(jì)算機(jī)程序預(yù)先設(shè)定。
圖2是流程信息的數(shù)據(jù)結(jié)構(gòu)示意圖。圖2中,記錄流程信息的數(shù)據(jù)結(jié)構(gòu) 包括與流程相關(guān)的記錄信息項(xiàng),如遞規(guī)算法的層次計(jì)數(shù)、條件表達(dá)式計(jì)數(shù)、 任務(wù)計(jì)數(shù)、任務(wù)分解方法計(jì)數(shù)、動作計(jì)數(shù)、計(jì)劃計(jì)數(shù)等。所述數(shù)據(jù)結(jié)構(gòu)記錄 的復(fù)雜流程信息可以根據(jù)被調(diào)試的計(jì)算機(jī)程序的不同,對記錄信息項(xiàng)進(jìn)行修 改和擴(kuò)充。
圖3是智能規(guī)劃軟件系統(tǒng)的原理圖。圖3中,通用型HTN規(guī)劃系統(tǒng)的 基本結(jié)構(gòu)包括由某種智能規(guī)劃語言形成的規(guī)劃域和規(guī)劃問題的文本文件、世 界狀態(tài)描述、HTN規(guī)劃器、計(jì)劃。規(guī)劃域和規(guī)劃問題的文本文件包括初始世 界狀態(tài)的描述、規(guī)劃域描述、規(guī)劃目標(biāo)任務(wù)描述。規(guī)劃域包括操作(operator)、 任務(wù)分解方法(method)、公理(axiom)等規(guī)劃域知識的描述。HTN規(guī)劃系 統(tǒng)從文本文件的初始世界狀態(tài)中裝入世界狀態(tài)描述,規(guī)劃器從文本文件中裝 入規(guī)劃域和目標(biāo)仟?jiǎng)?wù)描述。經(jīng)過順序任務(wù)分解算法的遞規(guī)處理,世界狀態(tài)被 不斷刷新,最終生成的動作序列從規(guī)劃器輸出形成計(jì)劃。規(guī)劃域模型和問題 實(shí)例采用SHOP2語言建立(參見文獻(xiàn)A^w/)., "a/, Z^ cwwe"to"o"/w 57/(9戶2, /2"戸.'〃sowre/wge.""/; ra/ecto/^o; )。通用型HTN規(guī)劃系統(tǒng)通過裝入規(guī)劃與 模型和問題實(shí)例形成針對某一應(yīng)用的專用型規(guī)劃系統(tǒng)。順序任務(wù)分解算法是近年來提出的高效、通用型HTN規(guī)劃算法(參見文 獻(xiàn)A^flM D., v4m L * //77V尸/a朋z'"gJ"cwma/ 。/爿Wzy c/a/
/"te〃&e"ce/ ew"rc/z, 20(200",/ p,379-4似),該算》去是一個(gè)遞規(guī)算法。由于裝 入的SHOP2域模型的不同以及同一域模型針對的問題實(shí)例的不同,順序任 務(wù)分解算法中同一段代碼的執(zhí)行流程存在極大的不確定性。
圖4是HTN搜索的流程樹結(jié)構(gòu)。圖4中,順序任務(wù)分解的程序執(zhí)行流程可 以描述為自左向右、自上向下的樹形遍歷過程。不同的初始世界狀態(tài)、不同的 規(guī)劃域和不同的目標(biāo)任務(wù)將產(chǎn)生不同的流程樹。故障的產(chǎn)生位置也因問題實(shí)例 的不同而發(fā)生變化。
在。++語言中,記錄復(fù)雜流程信息的數(shù)據(jù)結(jié)構(gòu)以"類"形式定義為CPR, 即Complex Process Record,該類被定義為靜態(tài)類(static),以便應(yīng)用于被調(diào)試 代碼的各部分并保持信息的一致性。
圖5是本發(fā)明實(shí)施例提供的計(jì)算機(jī)程序的調(diào)試方法流程圖。圖5中,以 不確定性遞規(guī)過程的調(diào)試為例,在¥。++6.0的源碼調(diào)試環(huán)境下,本發(fā)明的實(shí) 施過程如下
步驟101:建立在計(jì)算機(jī)程序所有運(yùn)行流程中均可使用的記錄流程信息 的數(shù)據(jù)結(jié)構(gòu)。
步驟102:被調(diào)試的計(jì)算機(jī)程序是否因故障而停止,如果是,記錄故障 代碼位置并執(zhí)行步驟103;否則,執(zhí)行步驟109。
步驟103:在故障代碼處,加入用于添加流程信息的代碼,通過該代碼刷
新數(shù)據(jù)結(jié)構(gòu)中記錄的流程信息。在本實(shí)施例中是這樣操作的,在遞規(guī)函數(shù)內(nèi)的
首行加入語句CPR:: ri++,記錄遞規(guī)層的增加;在遞規(guī)調(diào)用語句的下一行,加 入語句CPR:: ri-,記錄遞規(guī)層的減少。
步驟104:在故障代碼處,加入用于監(jiān)控流程信息的代碼,通過該代碼獲
取特定的流程信息,特定的流程信息根據(jù)被調(diào)試的計(jì)算機(jī)程序預(yù)先設(shè)定。在本市實(shí)例中,在故障代碼前加入下列語句intri=CPR:: ri,用以獲取CPR:: ri的值。
步驟105:重新運(yùn)行被調(diào)試的計(jì)算機(jī)程序,當(dāng)被調(diào)試的計(jì)算機(jī)程序再次在 故障代碼處終止時(shí),獲取監(jiān)控流程信息。在本實(shí)施例中,即觀察CRP:: ri的值,
假設(shè)觀察到的值為968。
步驟106:根據(jù)監(jiān)控流程信息,在故障代碼處的前面插入追蹤代碼。在本 實(shí)施例中,在步驟104插入的代碼與故障代碼之間加入下列兩行語句
第l行if (ri=968)
第2行intstop = 0;(該行無特定的意義,僅用于調(diào)試斷點(diǎn)設(shè)置) 并將調(diào)試斷點(diǎn)設(shè)在第2行。
步驟107:再次運(yùn)行被調(diào)試的計(jì)算機(jī)程序,使被調(diào)試的計(jì)算機(jī)程序在ri的 值為968時(shí)暫停。
步驟108:采用常用的步進(jìn)方式,繼續(xù)執(zhí)行程序并觀察相關(guān)變量的值,確
定故障原因并作相應(yīng)修改;之后,返回步驟102。
步驟109:在修改之后,刪除用于監(jiān)控流程信息的監(jiān)控代碼。 本發(fā)明提供的-種計(jì)算機(jī)程序的調(diào)試方法,對復(fù)雜過程的描述信息進(jìn)行
了集中管理,使用簡單、方便,可適用于軟件的不同代碼段和多種軟件程序。
同時(shí),該方法能夠快速準(zhǔn)確的定位故障代碼和發(fā)生故障時(shí)的運(yùn)行流程,方便 地確定程序運(yùn)行故障的產(chǎn)生原因,提高代碼修改的質(zhì)量和效率。最后,該方 法在模型驅(qū)動的軟件系統(tǒng)中,能夠幫助發(fā)現(xiàn)建模機(jī)制和模型設(shè)計(jì)中的缺陷, 提高模型構(gòu)建的質(zhì)量和效率。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不 局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可 輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明 的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種計(jì)算機(jī)程序的調(diào)試方法,其特征是所述方法包括下列步驟步驟1建立在計(jì)算機(jī)程序所有運(yùn)行流程中均可使用的記錄流程信息的數(shù)據(jù)結(jié)構(gòu);步驟2被調(diào)試的計(jì)算機(jī)程序運(yùn)行,判斷是否產(chǎn)生故障,如果是,則記錄故障代碼位置并執(zhí)行步驟3;否則,執(zhí)行步驟9;步驟3在故障代碼前面,加入用于添加流程信息的代碼,通過添加流程信息的代碼,刷新數(shù)據(jù)結(jié)構(gòu)中記錄的流程信息;步驟4在故障代碼處,加入用于監(jiān)控流程信息的代碼,通過監(jiān)控流程信息的代碼,獲取特定的流程信息;步驟5重新運(yùn)行被調(diào)試的計(jì)算機(jī)程序,當(dāng)被調(diào)試的計(jì)算機(jī)程序再次在故障代碼處終止時(shí),獲取監(jiān)控流程信息;步驟6根據(jù)監(jiān)控流程信息,在故障代碼處的前面插入流程信息的追蹤代碼;步驟7再次運(yùn)行被調(diào)試的計(jì)算機(jī)程序,使被調(diào)試的計(jì)算機(jī)程序在發(fā)生故障時(shí),暫停于故障代碼前的追蹤代碼處;步驟8從追蹤代碼處開始,采用常用的步進(jìn)方式,繼續(xù)執(zhí)行被調(diào)試的計(jì)算機(jī)程序,確定故障原因并作相應(yīng)修改;之后,返回步驟2;步驟9在修改之后,刪除用于監(jiān)控流程信息的監(jiān)控代碼。
2. 根據(jù)權(quán)利要求1所述的一種計(jì)算機(jī)程序的調(diào)試方法,其特征是所述數(shù)據(jù)結(jié)構(gòu)為全局性數(shù)據(jù)結(jié)構(gòu)。
3. 根據(jù)權(quán)利要求1所述的一種計(jì)算機(jī)程序的調(diào)試方法,其特征是所述數(shù)據(jù)結(jié)構(gòu)獨(dú)立于所述計(jì)算機(jī)程序。
4. 根據(jù)權(quán)利要求1所述的一種計(jì)算機(jī)程序的調(diào)試方法,其特征是所述數(shù)據(jù)結(jié)構(gòu)記錄的流程信息包括遞規(guī)算法的層次計(jì)數(shù)、條件表達(dá)式計(jì)數(shù)、任務(wù)計(jì)數(shù)、任 務(wù)分解方法計(jì)數(shù)、動作計(jì)數(shù)、計(jì)劃計(jì)數(shù)。
5. 根據(jù)權(quán)利要求1所述的一種計(jì)算機(jī)程序的調(diào)試方法,其特征是所述數(shù)據(jù)結(jié) 構(gòu)記錄的流程信息可以根據(jù)被調(diào)試的計(jì)算機(jī)程序進(jìn)行擴(kuò)展。
6. 根據(jù)權(quán)利要求1所述的一種計(jì)算機(jī)程序的調(diào)試方法,其特征是所述特定的 流程信息根據(jù)被調(diào)試的計(jì)算機(jī)程序預(yù)先設(shè)定。
全文摘要
本發(fā)明公開了計(jì)算機(jī)軟件開發(fā)技術(shù)領(lǐng)域中的一種計(jì)算機(jī)程序的調(diào)試方法。包括建立一個(gè)在被調(diào)試的計(jì)算機(jī)程序所有運(yùn)行流程中均可使用的記錄運(yùn)行流程信息的全局性數(shù)據(jù)結(jié)構(gòu);當(dāng)程序在源碼級調(diào)試環(huán)境下運(yùn)行并產(chǎn)生故障終止時(shí),在終止代碼附近加入添加流程信息的代碼和監(jiān)控流程信息的代碼;當(dāng)程序再次在故障代碼處終止時(shí),在程序故障代碼段前的適當(dāng)位置插入流程追蹤代碼,使程序在運(yùn)行流程發(fā)生故障前的適當(dāng)位置暫停,然后采用常用的步進(jìn)方法向故障代碼逐漸靠近,最終確定故障原因并作相應(yīng)修改;當(dāng)代碼修改后,刪去監(jiān)控流程信息的代碼。本發(fā)明能夠快速準(zhǔn)確的定位故障代碼和發(fā)生故障時(shí)的運(yùn)行流程,方便地確定程序運(yùn)行故障的產(chǎn)生原因。
文檔編號G06F11/36GK101615158SQ20091009081
公開日2009年12月30日 申請日期2009年8月10日 優(yōu)先權(quán)日2009年8月10日
發(fā)明者宋涇舸 申請人:北京交通大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1