專(zhuān)利名稱(chēng):一種并行程序的調(diào)試系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種信息技術(shù)領(lǐng)域,尤其涉及一種并行程序的調(diào)試系統(tǒng)及方法。
背景技術(shù):
起初人們認(rèn)為計(jì)算機(jī)性能的提高主要是由于生產(chǎn)出了更快更有效的處理器。這種觀(guān)點(diǎn)受到了并行處理概念的挑戰(zhàn)并行計(jì)算的根本意義是將兩臺(tái)或多臺(tái)計(jì)算機(jī)連接起來(lái),共同解決一些復(fù)雜的計(jì)算問(wèn)題。比如,隨著科學(xué)和信息技術(shù)的發(fā)展,許多領(lǐng)域如氣象預(yù)報(bào)、地震分析、信息檢索等都需要對(duì)大規(guī)模、海量數(shù)據(jù)進(jìn)行快速高效的處理,促使計(jì)算從串行過(guò)度到并行。并行計(jì)算在軍事、科技、商業(yè)等領(lǐng)域應(yīng)用也越來(lái)越廣泛,更多的用戶(hù)開(kāi)始使用并行技術(shù)處理問(wèn)題。并行處理技術(shù)的發(fā)展已經(jīng)有了 20多年的歷史,雖然說(shuō)并行機(jī)硬件的發(fā)展算不上 是突飛猛進(jìn),但是也是相當(dāng)迅速的。IBM、Intel、SUN、SGI等公司都致力于高性能并行機(jī)的研發(fā),并且在市場(chǎng)取得了不錯(cuò)的業(yè)績(jī)。但是,相對(duì)于硬件體系結(jié)構(gòu)的發(fā)展而言,軟件的發(fā)展卻嚴(yán)重滯后,影響了硬件效率的發(fā)揮,限制了并行機(jī)系統(tǒng)的廣泛應(yīng)用。例如,作為并行程序的調(diào)試器,目前許多并行程序調(diào)試器還不具備平臺(tái)的可移植能力。雖然有些調(diào)試器對(duì)于平臺(tái)移植這一問(wèn)題采取了有效的方法,那就是利用GDB作為底層的串行調(diào)試器,例如P2D2和Mantic。但它們也存在著缺陷,因?yàn)樗鼈儗?duì)GDB返回結(jié)果的輸出都由遠(yuǎn)端一個(gè)服務(wù)器進(jìn)行解析,本地不做此項(xiàng)工作,這也導(dǎo)致了它們不能更好的支持異構(gòu)的環(huán)境。人們采用D⑶B和DDBG解決了異構(gòu)的問(wèn)題,但D⑶B和DDBG使用的⑶B接口是原來(lái)的GDB解釋器,在可擴(kuò)展性、可靠性、可維護(hù)性和效率上都存在缺陷。另外的并行程序解決方案,如TotalView能夠自動(dòng)捕獲MPI、PVM、HPF、OpenMP等并行程序進(jìn)行調(diào)試,可以在本地調(diào)試多進(jìn)程、多線(xiàn)程的程序,可以調(diào)試同構(gòu)機(jī)群系統(tǒng)上的分布式系統(tǒng),支持動(dòng)態(tài)調(diào)試,功能強(qiáng)大,是少有的多平臺(tái)商業(yè)調(diào)試器。但是它沒(méi)有使用現(xiàn)成的串行調(diào)試器,在不同平臺(tái)下要使用不同的版本,不支持異構(gòu)環(huán)境,由于用戶(hù)界面和底層控制都運(yùn)行在Unix/Linux平臺(tái),不熟悉Unix/Linux平臺(tái)的用戶(hù)使用時(shí)會(huì)感覺(jué)相對(duì)困難。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)存在的并行程序調(diào)試的不足,提供一種能夠?qū)崿F(xiàn)跨平臺(tái)應(yīng)用的并行程序的調(diào)試系統(tǒng)及方法,方便用戶(hù)編輯調(diào)試代碼、設(shè)置并行程序運(yùn)行斷點(diǎn),并能通過(guò)遠(yuǎn)程調(diào)用的方式編譯、運(yùn)行、調(diào)試并行程序,以及查看性能分析結(jié)果,具有很好的移植性和可擴(kuò)展性。為了達(dá)到上述發(fā)明目的,本發(fā)明提出了一種并行程序的調(diào)試系統(tǒng),所述系統(tǒng)是通過(guò)以下的技術(shù)方案實(shí)現(xiàn)的一種并行程序的調(diào)試系統(tǒng),所述系統(tǒng)包括前端集成調(diào)試模塊,用來(lái)給用戶(hù)提供調(diào)試窗口,對(duì)待調(diào)試的并行程序進(jìn)行調(diào)試操作;
后臺(tái)調(diào)試管理模塊,用來(lái)根據(jù)前端集成調(diào)試模塊發(fā)來(lái)的調(diào)試命令,通過(guò)源代碼插樁,并對(duì)插樁后的并行程序進(jìn)行編譯運(yùn)行,并將運(yùn)行的結(jié)果反饋給前端集成調(diào)試模塊。進(jìn)ー步優(yōu)選地,所述前端集成調(diào)試模塊具體包括工程管理子模塊,用來(lái)提供工程管理功能,所述工程管理功能包括支持用戶(hù)新建、刪除新的工程,在工程中添加、刪除文件;文件管理子模塊,用來(lái)提供文件管理功能,所述文件管理功能包括源代碼文件的新建、打開(kāi)、保存或關(guān)閉;代碼編輯管理子模塊,用來(lái)提供代碼編輯管理功能,所述代碼編輯管理功能包括允許用戶(hù)編輯代碼、代碼板旁邊即時(shí)顯示行號(hào)、支持基本的編程語(yǔ)言關(guān)鍵字高亮顯示,支持區(qū)分大小寫(xiě)的查找或替換;界面子模塊,用來(lái)根據(jù)用戶(hù)需求或系統(tǒng)推薦,設(shè)置斷點(diǎn)或性能觀(guān)測(cè)點(diǎn)。進(jìn)ー步優(yōu)選地,所述界面子模塊還包括一對(duì)話(huà)框,用來(lái)設(shè)置各種可能的條件值對(duì)斷點(diǎn)進(jìn)行控制。進(jìn)ー步優(yōu)選地,所述后臺(tái)調(diào)試管理模塊包括插樁模塊,用來(lái)按照實(shí)際需要對(duì)源代碼進(jìn)行訪(fǎng)問(wèn)和修改,加入所需要的功能代碼,來(lái)捕獲程序當(dāng)前的狀態(tài)或增加外部代碼運(yùn)行過(guò)程的控制。進(jìn)ー步優(yōu)選地,所述插樁模塊具體包括斷點(diǎn)管理插樁子模塊,用來(lái)使得經(jīng)插樁后的代碼在執(zhí)行過(guò)程中與前端集成調(diào)試模塊進(jìn)行通信,模擬實(shí)現(xiàn)斷點(diǎn)效果;變量觀(guān)測(cè)插樁子模塊,用來(lái)使得經(jīng)插樁的代碼與前端集成調(diào)試模塊之間進(jìn)行通信,在斷點(diǎn)處傳輸有效變量信息并顯示給用戶(hù);性能分析插樁子模塊,用來(lái)使得經(jīng)插樁的代碼在執(zhí)行過(guò)程中與前端集成調(diào)試模塊之間進(jìn)行通信傳遞并行程序的性能參數(shù),并在前端集成調(diào)試模塊中實(shí)現(xiàn)性能觀(guān)測(cè)與記錄。進(jìn)ー步優(yōu)選地,所述實(shí)際需求通過(guò)插樁需求描述文件的方式傳遞給源代碼插樁模塊,插樁模塊根據(jù)插樁需求描述文件給出的信息,調(diào)用相應(yīng)的接ロ,對(duì)待調(diào)試的程序源代碼進(jìn)行自動(dòng)插樁。進(jìn)ー步優(yōu)選地,所述插樁需求描述文件包括斷點(diǎn)管理需求描述文件、變量觀(guān)測(cè)需求描述文件和性能分析需求描述文件。進(jìn)ー步優(yōu)選地,所述斷點(diǎn)管理需求描述文件的內(nèi)容主要來(lái)自于用戶(hù)通過(guò)前端集成調(diào)試模塊的界面子模塊設(shè)置的各種類(lèi)型靜態(tài)斷點(diǎn)以及條件斷點(diǎn)。進(jìn)ー步優(yōu)選地,所述變量觀(guān)測(cè)和性能分析需求描述文件的內(nèi)容主要來(lái)自于各個(gè)變量的作用域、類(lèi)型等信息以及待調(diào)試的并行程序的各指導(dǎo)語(yǔ)句所在位置的信息。進(jìn)ー步優(yōu)選地,所述變量觀(guān)測(cè)和性能分析需求描述文件的內(nèi)容根據(jù)在插樁之前對(duì)待調(diào)試的程序的源代碼進(jìn)行詞法和語(yǔ)法分析,構(gòu)造出的相應(yīng)的語(yǔ)法樹(shù)生成。進(jìn)ー步優(yōu)選地,所述后臺(tái)調(diào)試管理模塊還包括語(yǔ)法分析模塊,用來(lái)根據(jù)用戶(hù)所編寫(xiě)的規(guī)則及每條規(guī)則所對(duì)應(yīng)的處理語(yǔ)句生成用于分析和處理待調(diào)試的程序的解析程序,所述解析程序根據(jù)編寫(xiě)指定的規(guī)則對(duì)待調(diào)試的程序進(jìn)行詞法和語(yǔ)法分析,并在執(zhí)行每條規(guī)則所對(duì)應(yīng)的處理語(yǔ)句構(gòu)建語(yǔ)法樹(shù)。進(jìn)ー步優(yōu)選地,所述前端集成調(diào)試模塊與后臺(tái)調(diào)試管理模塊通過(guò)Socket結(jié)構(gòu)體進(jìn)行通信。為了實(shí)現(xiàn)前述發(fā)明目的,本發(fā)明實(shí)施例還提出了一種并行程序的調(diào)試方法,所述并行程序的調(diào)試方法是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的一種并行程序的調(diào)試方法,其特征在于,所述方法包括通過(guò)前端調(diào)試環(huán)境的調(diào)試窗口,對(duì)待調(diào)試的并行程序進(jìn)行調(diào)試操作;根據(jù)前端集成調(diào)試環(huán)境發(fā)來(lái)的調(diào)試命令,通過(guò)源代碼插樁,并對(duì)插樁后的并行程序進(jìn)行編譯運(yùn)行,將運(yùn)行的結(jié)果反饋給前端集成調(diào)試環(huán)境。進(jìn)一步優(yōu)選地,所述調(diào)試操作具體包括工程管理,所述工程管理功能包括支持用戶(hù)新建、刪除新的工程,在工程中添加、 刪除文件;文件管理,所述文件管理功能包括源代碼文件的新建、打開(kāi)、保存或關(guān)閉;代碼編輯管理,所述代碼編輯管理功能包括允許用戶(hù)編輯代碼、代碼板旁邊即時(shí)顯示行號(hào)、支持基本的編程語(yǔ)言關(guān)鍵字高亮顯示,支持區(qū)分大小寫(xiě)的查找或替換;根據(jù)用戶(hù)需求或系統(tǒng)推薦,設(shè)置斷點(diǎn)或性能觀(guān)測(cè)點(diǎn)。進(jìn)一步優(yōu)選地,所述方法還包括通過(guò)一對(duì)話(huà)框,來(lái)設(shè)置各種可能的條件值對(duì)斷點(diǎn)進(jìn)行控制。進(jìn)一步優(yōu)選地,所述通過(guò)源代碼插樁,并對(duì)插樁后的并行程序進(jìn)行編譯運(yùn)行,將運(yùn)行的結(jié)果反饋給前端集成調(diào)試環(huán)境具體包括按照實(shí)際需要對(duì)源代碼進(jìn)行訪(fǎng)問(wèn)和修改,加入所需要的功能代碼,來(lái)捕獲程序當(dāng)前的狀態(tài)或增加外部代碼運(yùn)行過(guò)程的控制,并對(duì)插樁后的并行程序進(jìn)行編譯運(yùn)行,將運(yùn)行的結(jié)果反饋給前端集成調(diào)試環(huán)境。進(jìn)一步優(yōu)選地,所述源代碼插樁具體包括斷點(diǎn)管理,使得經(jīng)插樁后的代碼在執(zhí)行過(guò)程中與前端集成調(diào)試環(huán)境進(jìn)行通信,模擬實(shí)現(xiàn)斷點(diǎn)效果;變量觀(guān)測(cè)插樁,使得經(jīng)插樁的代碼與前端集成調(diào)試環(huán)境之間進(jìn)行通信,在斷點(diǎn)處傳輸有效變量信息并顯示給用戶(hù);性能分析插樁,使得經(jīng)插樁的代碼在執(zhí)行過(guò)程中與前端集成調(diào)試環(huán)境之間進(jìn)行通信傳遞并行程序的性能參數(shù),并在前端集成調(diào)試環(huán)境中實(shí)現(xiàn)性能觀(guān)測(cè)與記錄。進(jìn)一步優(yōu)選地,所述實(shí)際需求通過(guò)插樁需求描述文件的方式傳遞給源代碼插樁模塊,源代碼插樁模塊根據(jù)插樁需求描述文件給出的信息,調(diào)用相應(yīng)的接口,對(duì)待調(diào)試的程序源代碼進(jìn)行自動(dòng)插樁。進(jìn)一步優(yōu)選地,所述插樁需求描述文件包括斷點(diǎn)管理需求描述文件、變量觀(guān)測(cè)需求描述文件或性能分析需求描述文件。進(jìn)一步優(yōu)選地,所述斷點(diǎn)管理需求描述文件的內(nèi)容主要來(lái)自于用戶(hù)通過(guò)前端集成調(diào)試模塊的界面子模塊設(shè)置的各種類(lèi)型靜態(tài)斷點(diǎn)以及條件斷點(diǎn)。進(jìn)一步優(yōu)選地,所述變量觀(guān)測(cè)和性能分析需求描述文件的內(nèi)容主要來(lái)自于各個(gè)變量的作用域、類(lèi)型等信息以及待調(diào)試的并行程序的各指導(dǎo)語(yǔ)句所在位置的信息。進(jìn)一步優(yōu)選地,所述變量觀(guān)測(cè)和性能分析需求描述文件的內(nèi)容根據(jù)在插樁之前對(duì)待調(diào)試的程序的源代碼進(jìn)行詞法和語(yǔ)法分析,構(gòu)造出的相應(yīng)的語(yǔ)法樹(shù)生成。
進(jìn)一步優(yōu)選地,所述方法還包括根據(jù)用戶(hù)所編寫(xiě)的規(guī)則及每條規(guī)則所對(duì)應(yīng)的處理語(yǔ)句生成用于分析和處理待調(diào)試的程序的解析程序,所述解析程序根據(jù)編寫(xiě)指定的規(guī)則對(duì)待調(diào)試的程序進(jìn)行詞法和語(yǔ)法分析,并在執(zhí)行每條規(guī)則所對(duì)應(yīng)的處理語(yǔ)句構(gòu)建語(yǔ)法樹(shù)。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例提供的并行程序的遠(yuǎn)程調(diào)試系統(tǒng)和方法,不依賴(lài)于操作系統(tǒng)和硬件環(huán)境,使得不熟悉Linux操作系統(tǒng)甚至沒(méi)有裝Linux操作系統(tǒng)的用戶(hù)也能使用這款調(diào)試工具在遠(yuǎn)程多核計(jì)算機(jī)上進(jìn)行并行程序的調(diào)試分析,有利于資源的整合;另外,基于語(yǔ)法樹(shù)的源代碼插樁,有針對(duì)性的構(gòu)造語(yǔ)法樹(shù),得到進(jìn)行斷點(diǎn)管理、變量觀(guān)測(cè)和性能分析插樁所需的信息,并利用插樁后的語(yǔ)法樹(shù)進(jìn)行反構(gòu)得到插樁后代碼;同時(shí),利用編譯運(yùn)行經(jīng)插樁后源代碼的方法實(shí)現(xiàn)程序調(diào)試過(guò)程中的斷點(diǎn)管理、變量觀(guān)測(cè)和性能分析,并為并行程序的每一個(gè)線(xiàn)程建立一個(gè)socket連接于前端集成調(diào)試環(huán)境進(jìn)行交互,不同于傳統(tǒng)的利用GDB提供接口的策略,使得該工具在可擴(kuò)展性、可維護(hù)性和效率等方面得到很大提聞。
通過(guò)下面結(jié)合附圖對(duì)其示例性實(shí)施例進(jìn)行的描述,本發(fā)明上述特征和優(yōu)點(diǎn)將會(huì)變得更加清楚和容易理解。圖I為本發(fā)明實(shí)施例I 一種并行程序的調(diào)試系統(tǒng)運(yùn)行示意圖;圖2為本發(fā)明實(shí)施例2另一種并行程序的調(diào)試系統(tǒng)的組成示意圖;圖3為本發(fā)明實(shí)施例3又一種并行程序的調(diào)試系統(tǒng)的組成示意圖;圖4為本發(fā)明實(shí)施例4 一種并行程序的調(diào)試系統(tǒng)總體運(yùn)行示意圖;圖5為本發(fā)明實(shí)施例5后臺(tái)調(diào)試管理模塊根據(jù)語(yǔ)法樹(shù)進(jìn)行插樁的示意圖;圖6為本發(fā)明實(shí)施例6 —種并行程序的調(diào)試方法的流程圖。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。如圖I所示,為本發(fā)明實(shí)施例I 一種并行程序的調(diào)試系統(tǒng)的運(yùn)行示意圖,所述系統(tǒng)包括前端集成調(diào)試模塊和后臺(tái)調(diào)試管理模塊,一優(yōu)選的實(shí)施方式包括,所述前端集成調(diào)試模塊和后臺(tái)調(diào)試管理模塊分別運(yùn)行于兩個(gè)不同的計(jì)算平臺(tái)上,使得幫助用戶(hù)實(shí)現(xiàn)對(duì)并行程序的遠(yuǎn)程調(diào)試。如圖2所示,本發(fā)明實(shí)施例2的前端集成調(diào)試模塊用來(lái)提供工程管理、文件管理、編輯程序代碼、語(yǔ)法元素高亮顯示、設(shè)置/刪除程序斷點(diǎn)、生成插樁任務(wù)描述文件、啟動(dòng)對(duì)調(diào)試程序的遠(yuǎn)程編譯及運(yùn)行、變量信息的觀(guān)測(cè)顯示及性能分析結(jié)果的可視化顯示等功能。本發(fā)明實(shí)施例的調(diào)試系統(tǒng)的前端集成模塊提供的基本的工程管理、文件管理、編輯程序代碼功能,其中,工程管理功能包括支持用戶(hù)新建、刪除新的工程,在工程中添加、刪除文件等;文件管理功能包括源代碼文件的新建、打開(kāi)、保存、關(guān)閉等,編輯程序代碼功能包括允許用戶(hù)編輯代碼,代碼板旁邊即時(shí)顯示行號(hào),支持基本的C語(yǔ)言關(guān)鍵字高亮顯示,支持區(qū)分大小寫(xiě)的查找/替換等。因此,用戶(hù)除了通過(guò)前端集成模塊編輯程序代碼,還可以點(diǎn)擊相應(yīng)的按鈕啟動(dòng)遠(yuǎn)程編譯、運(yùn)行并行程序。同時(shí)用戶(hù)可以在前端集成調(diào)試模塊的界面子模塊上根據(jù)自身需求和系統(tǒng)推薦,設(shè)置斷點(diǎn)及性能觀(guān)測(cè)點(diǎn),還可以通過(guò)系統(tǒng)提供的對(duì)話(huà)框設(shè)置各種可能的條件值(條件表達(dá)式和語(yǔ)句執(zhí)行次數(shù))對(duì)斷點(diǎn)進(jìn)行控制。同吋,當(dāng)進(jìn)入斷點(diǎn)后,待調(diào)試的并行程序在斷點(diǎn)處產(chǎn)生的斷點(diǎn)和變量信息經(jīng)socket通信傳遞給前端集成調(diào)試模塊后通過(guò)界面子模塊進(jìn)行可視化顯示,其中包括對(duì)于進(jìn)入斷點(diǎn)的當(dāng)前語(yǔ)句行的高亮提醒,有效變量的變量名、變量類(lèi)型、當(dāng)前值的分組顯示,以及性能分析結(jié)果的條形圖顯示,顯示值ket范文件、啟動(dòng)對(duì)待調(diào)試程序的遠(yuǎn)程編譯及運(yùn)行、變量名稱(chēng)。所述的界面子模塊,其界面簡(jiǎn)潔,功能分類(lèi)清晰,作為ー個(gè)并行程序的遠(yuǎn)程調(diào)試前臺(tái)集成環(huán)境具有體積小、功能全的特點(diǎn)。如圖3所示,插樁模塊,作為源代碼級(jí)自動(dòng)插樁,用于有效定位和解決軟件疑難問(wèn)題,實(shí)現(xiàn)遠(yuǎn)程調(diào)試,保證軟件產(chǎn)品的質(zhì)量,按照實(shí)際需要對(duì)源代碼進(jìn)行訪(fǎng)問(wèn)和修改,加入所需要的功能代碼,來(lái)捕獲程序當(dāng)前的狀態(tài)或增加外部代碼運(yùn)行過(guò)程的控制,加入代碼后再重新編譯、鏈接并加以運(yùn)行,以獲得預(yù)期功能和執(zhí)行效果。本發(fā)明實(shí)施例的調(diào)試系統(tǒng)的源代碼級(jí)插樁主要為了實(shí)現(xiàn)并行程序遠(yuǎn)程調(diào)試中的 斷點(diǎn)管理、變量觀(guān)測(cè)和性能分析功能,通過(guò)重新編譯運(yùn)行插樁后的代碼來(lái)管理用戶(hù)設(shè)立的斷點(diǎn)、交互斷點(diǎn)處的有效變量以及實(shí)現(xiàn)性能數(shù)據(jù)的分析和可視化顯示等。為了使插樁具有較好的靈活性和可擴(kuò)展性,同時(shí)保證數(shù)據(jù)傳輸?shù)姆奖?,本發(fā)明實(shí)施例的并行程序遠(yuǎn)程調(diào)試系統(tǒng)采用生成插樁需求描述文件的方式,根據(jù)插樁需求描述文件給出的信息,調(diào)用相應(yīng)的接ロ,對(duì)待調(diào)試的程序源代碼進(jìn)行自動(dòng)插樁。根據(jù)插樁實(shí)現(xiàn)的功能,插樁需求描述文件也分為斷點(diǎn)管理、變量觀(guān)測(cè)和性能分析三部分,其中斷點(diǎn)管理需求描述文件的內(nèi)容主要來(lái)自于用戶(hù)通過(guò)前端集成調(diào)試模塊的界面子模塊設(shè)置的各種類(lèi)型靜態(tài)斷點(diǎn)以及條件斷點(diǎn),但是變量觀(guān)測(cè)和性能分析需求描述文件則需要各個(gè)變量的作用域、類(lèi)型等信息以及OpenMP并行程序的各指導(dǎo)語(yǔ)句所在位置。這便需要在插樁之前對(duì)待調(diào)試的程序的源代碼進(jìn)行詞法和語(yǔ)法分析,構(gòu)造出相應(yīng)的語(yǔ)法樹(shù)。如圖5所示,所述語(yǔ)法樹(shù)主要采用基于LEX/YACC,LEX和YACC工具分別具有詞法和語(yǔ)法規(guī)則,并為每條規(guī)則配置相應(yīng)的處理語(yǔ)句,用來(lái)分析基本C語(yǔ)言和OpenMP語(yǔ)法成分。LEX和YACC工具根據(jù)用戶(hù)所編寫(xiě)的規(guī)則及每條規(guī)則所對(duì)應(yīng)的處理語(yǔ)句生成用于分析和處理待調(diào)試的程序的解析程序,該程序根據(jù)編寫(xiě)指定的規(guī)則對(duì)待調(diào)試的程序進(jìn)行詞法和語(yǔ)法分析,并在執(zhí)行每條規(guī)則所對(duì)應(yīng)的處理語(yǔ)句時(shí)構(gòu)建語(yǔ)法樹(shù)。遍歷這棵語(yǔ)法樹(shù)可以得到待調(diào)試程序中的變量信息及OpenMp指導(dǎo)語(yǔ)句相關(guān)信息,再結(jié)合用戶(hù)通過(guò)前端集成調(diào)試模塊給出的調(diào)試需求,即可生成插樁需求文件輔助完成插樁,插樁后產(chǎn)生新的源代碼,經(jīng)編譯之后再次加以執(zhí)行即可得到調(diào)試所需信息。如圖3所示,本發(fā)明實(shí)施例2的插樁模塊包括(I)斷點(diǎn)管理插樁子模塊斷點(diǎn)管理插樁子模塊用于使得經(jīng)插樁后的代碼在執(zhí)行過(guò)程中可以與前端集成調(diào)試模塊進(jìn)行通信,模擬實(shí)現(xiàn)斷點(diǎn)效果。本發(fā)明實(shí)施例2通過(guò)在用戶(hù)編寫(xiě)的源代碼中插入相應(yīng)的斷點(diǎn)樁函數(shù)調(diào)用語(yǔ)句來(lái)實(shí)現(xiàn)斷點(diǎn)管理功能,并將各個(gè)斷點(diǎn)的信息放入ー個(gè)鏈表結(jié)構(gòu)中。每當(dāng)執(zhí)行到斷點(diǎn)樁函數(shù)吋,該函數(shù)便會(huì)結(jié)合自身參數(shù)和鏈表中的斷點(diǎn)信息判斷是否觸發(fā)當(dāng)前斷點(diǎn),如果需要觸發(fā),則為相應(yīng)的線(xiàn)程建立ー個(gè)與前端集成調(diào)試模塊的通信連接。
本發(fā)明實(shí)施例3作為一個(gè)優(yōu)選的實(shí)施例,其斷點(diǎn)處理函數(shù)的定義和斷點(diǎn)鏈表結(jié)構(gòu)的定義都包含在一個(gè)頭文件中,只需在源代碼中包含這個(gè)頭文件即可調(diào)用。斷點(diǎn)處理函數(shù)可以提供觸發(fā)條件檢查、變量有效值傳輸、等待用戶(hù)控制等功能。詳細(xì)信息如下
void breakpoint ( int num, int lineno, int type, int hittime)num :斷點(diǎn)號(hào),作為區(qū)分各個(gè)斷點(diǎn)的唯一標(biāo)識(shí);
lineno:斷點(diǎn)所處行的原始行號(hào),方便用戶(hù)在前端集成調(diào)試環(huán)境中定位當(dāng)前斷占.type :斷點(diǎn)類(lèi)型,枚舉類(lèi)型,具體定義如下
typedef enum {
normal,//靜態(tài)斷點(diǎn)
conditional, //條件斷點(diǎn)
hittimej, //命中次數(shù)小于所設(shè)數(shù)時(shí)觸發(fā)的斷點(diǎn) hittimeje, //命中次數(shù)小于等于所設(shè)數(shù)時(shí)觸發(fā)的斷點(diǎn) hittime 一 e //命中次數(shù)等于所設(shè)數(shù)時(shí)觸發(fā)的斷點(diǎn) hittime_he, //命中次數(shù)大于等于所設(shè)數(shù)時(shí)觸發(fā)的斷點(diǎn) hittime 一 h //命中次數(shù)大于所設(shè)數(shù)時(shí)觸發(fā)的斷點(diǎn) } BpType;_hittime :斷點(diǎn)條件命中次數(shù),當(dāng)type為normal和conditional時(shí),該參數(shù)沒(méi)有意義,當(dāng)斷點(diǎn)觸發(fā)條件根據(jù)命中次數(shù)決定時(shí),該參數(shù)傳入用戶(hù)通過(guò)前端集成調(diào)試模塊設(shè)置的次數(shù),以形成觸發(fā)條件。除了根據(jù)命中次數(shù)決定的條件斷點(diǎn),本發(fā)明實(shí)施例還允許用戶(hù)設(shè)置帶有條件表達(dá)式的斷點(diǎn),當(dāng)斷點(diǎn)的type為normal時(shí),用戶(hù)可以通過(guò)前端集成調(diào)試模塊給出條件表達(dá)式,此時(shí)本發(fā)明實(shí)施例4可以用一條帶有此表達(dá)式的if語(yǔ)句判斷條件是否滿(mǎn)足,斷點(diǎn)是否激發(fā)。(2)變量觀(guān)測(cè)插樁子模塊變量觀(guān)測(cè)插樁子模塊用來(lái)使得經(jīng)插樁的代碼可以與前端集成調(diào)試模塊之間進(jìn)行通信,在斷點(diǎn)處傳輸有效變量信息并顯示給用戶(hù)。本發(fā)明實(shí)施例5采用在用戶(hù)編寫(xiě)的源代碼中插入相應(yīng)的變量上報(bào)函數(shù)實(shí)現(xiàn)對(duì)變量定義以及賦值等動(dòng)作的監(jiān)控,即時(shí)捕捉變量變化信息。同時(shí)構(gòu)造一個(gè)變量鏈表結(jié)構(gòu)儲(chǔ)存存放所有的變量信息,具體定義如下
權(quán)利要求
1.ー種并行程序的調(diào)試系統(tǒng),其特征在于,所述系統(tǒng)包括 前端集成調(diào)試模塊,用來(lái)給用戶(hù)提供調(diào)試窗ロ,對(duì)待調(diào)試的并行程序進(jìn)行調(diào)試操作; 后臺(tái)調(diào)試管理模塊,用來(lái)根據(jù)前端集成調(diào)試模塊發(fā)來(lái)的調(diào)試命令,通過(guò)源代碼插樁,并對(duì)插樁后的并行程序進(jìn)行編譯運(yùn)行,并將運(yùn)行的結(jié)果反饋給前端集成調(diào)試模塊。
2.根據(jù)權(quán)利要求I所述的系統(tǒng),其特征在于,所述前端集成調(diào)試模塊具體包括 工程管理子模塊,用來(lái)提供工程管理功能,所述工程管理功能包括支持用戶(hù)新建、刪除新的工程,在工程中添加、刪除文件; 文件管理子模塊,用來(lái)提供文件管理功能,所述文件管理功能包括源代碼文件的新建、打開(kāi)、保存或關(guān)閉; 代碼編輯管理子模塊,用來(lái)提供代碼編輯管理功能,所述代碼編輯管理功能包括允許用戶(hù)編輯代碼、代碼板旁邊即時(shí)顯示行號(hào)、支持基本的編程語(yǔ)言關(guān)鍵字高亮顯示,支持區(qū)分大小寫(xiě)的查找或替換; 界面子模塊,用來(lái)根據(jù)用戶(hù)需求或系統(tǒng)推薦,設(shè)置斷點(diǎn)或性能觀(guān)測(cè)點(diǎn)。
3.根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于,所述界面子模塊還包括一對(duì)話(huà)框,用來(lái)設(shè)置各種可能的條件值對(duì)斷點(diǎn)進(jìn)行控制。
4.根據(jù)權(quán)利要求3所述的系統(tǒng),其特征在于,所述后臺(tái)調(diào)試管理模塊包括 插樁模塊,用來(lái)按照實(shí)際需要對(duì)源代碼進(jìn)行訪(fǎng)問(wèn)和修改,加入所需要的功能代碼,來(lái)捕獲程序當(dāng)前的狀態(tài)或增加外部代碼運(yùn)行過(guò)程的控制。
5.根據(jù)權(quán)利要求4所述的系統(tǒng),其特征在于,所述插樁模塊具體包括 斷點(diǎn)管理插樁子模塊,用來(lái)使得經(jīng)插樁后的代碼在執(zhí)行過(guò)程中與前端集成調(diào)試模塊進(jìn)行通信,模擬實(shí)現(xiàn)斷點(diǎn)效果; 變量觀(guān)測(cè)插樁子模塊,用來(lái)使得經(jīng)插樁的代碼與前端集成調(diào)試模塊之間進(jìn)行通信,在斷點(diǎn)處傳輸有效變量信息并顯示給用戶(hù); 性能分析插樁子模塊,用來(lái)使得經(jīng)插樁的代碼在執(zhí)行過(guò)程中與前端集成調(diào)試模塊之間進(jìn)行通信傳遞并行程序的性能參數(shù),并在前端集成調(diào)試模塊中實(shí)現(xiàn)性能觀(guān)測(cè)與記錄。
6.根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于,所述實(shí)際需求通過(guò)插樁需求描述文件的方式傳遞給源代碼插樁模塊,源代碼插樁模塊根據(jù)插樁需求描述文件給出的信息,調(diào)用相應(yīng)的接ロ,對(duì)待調(diào)試的程序源代碼進(jìn)行自動(dòng)插樁。
7.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在干,所述插樁需求描述文件包括斷點(diǎn)管理需求描述文件、變量觀(guān)測(cè)需求描述文件和性能分析需求描述文件。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述斷點(diǎn)管理需求描述文件的內(nèi)容主要來(lái)自于用戶(hù)通過(guò)前端集成調(diào)試模塊的界面子模塊設(shè)置的各種類(lèi)型靜態(tài)斷點(diǎn)以及條件斷點(diǎn)。
9.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在干,所述變量觀(guān)測(cè)和性能分析需求描述文件的內(nèi)容主要來(lái)自于各個(gè)變量的作用域、類(lèi)型等信息以及待調(diào)試的并行程序的各指導(dǎo)語(yǔ)句所在位置的信息。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述變量觀(guān)測(cè)和性能分析需求描述文件的內(nèi)容根據(jù)在插樁之前對(duì)待調(diào)試的程序的源代碼進(jìn)行詞法和語(yǔ)法分析,構(gòu)造出的相應(yīng)的語(yǔ)法樹(shù)生成。
11.根據(jù)權(quán)利要求10所述的系統(tǒng),其特征在于,所述后臺(tái)調(diào)試管理模塊還包括語(yǔ)法分析模塊,用來(lái)根據(jù)用戶(hù)所編寫(xiě)的規(guī)則及每條規(guī)則所對(duì)應(yīng)的處理語(yǔ)句生成用于分析和處理待調(diào)試的程序的解析程序,所述解析程序根據(jù)編寫(xiě)指定的規(guī)則對(duì)待調(diào)試的程序進(jìn)行詞法和語(yǔ)法分析,并在執(zhí)行每條規(guī)則所對(duì)應(yīng)的處理語(yǔ)句構(gòu)建語(yǔ)法樹(shù)。
12.根據(jù)權(quán)利要求I至11任意一項(xiàng)所述的系統(tǒng),其特征在于,所述前端集成調(diào)試模塊與后臺(tái)調(diào)試管理模塊通過(guò)Socket結(jié)構(gòu)體進(jìn)行通信。
13.一種并行程序的調(diào)試方法,其特征在于,所述方法包括 通過(guò)前端調(diào)試環(huán)境的調(diào)試窗口,對(duì)待調(diào)試的并行程序進(jìn)行調(diào)試操作; 根據(jù)前端集成調(diào)試環(huán)境發(fā)來(lái)的調(diào)試命令,通過(guò)源代碼插樁,并對(duì)插樁后的并行程序進(jìn)行編譯運(yùn)行,將運(yùn)行的結(jié)果反饋給前端集成調(diào)試環(huán)境。
14.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述調(diào)試操作具體包括 工程管理,所述工程管理功能包括支持用戶(hù)新建、刪除新的工程,在工程中添加、刪除文件; 文件管理,所述文件管理功能包括源代碼文件的新建、打開(kāi)、保存或關(guān)閉; 代碼編輯管理,所述代碼編輯管理功能包括允許用戶(hù)編輯代碼、代碼板旁邊即時(shí)顯示行號(hào)、支持基本的編程語(yǔ)言關(guān)鍵字高亮顯示,支持區(qū)分大小寫(xiě)的查找或替換; 根據(jù)用戶(hù)需求或系統(tǒng)推薦,設(shè)置斷點(diǎn)或性能觀(guān)測(cè)點(diǎn)。
15.根據(jù)權(quán)利要求14所述的方法,其特征在于,所述方法還包括通過(guò)一對(duì)話(huà)框,來(lái)設(shè)置各種可能的條件值對(duì)斷點(diǎn)進(jìn)行控制。
16.根據(jù)權(quán)利要求15所述的方法,其特征在于,所述通過(guò)源代碼插樁,并對(duì)插樁后的并行程序進(jìn)行編譯運(yùn)行,將運(yùn)行的結(jié)果反饋給前端集成調(diào)試環(huán)境具體包括 按照實(shí)際需要對(duì)源代碼進(jìn)行訪(fǎng)問(wèn)和修改,加入所需要的功能代碼,來(lái)捕獲程序當(dāng)前的狀態(tài)或增加外部代碼運(yùn)行過(guò)程的控制,并對(duì)插樁后的并行程序進(jìn)行編譯運(yùn)行,將運(yùn)行的結(jié)果反饋給前端集成調(diào)試環(huán)境。
17.根據(jù)權(quán)利要求16所述的方法,其特征在于,所述源代碼插樁具體包括 斷點(diǎn)管理,使得經(jīng)插樁后的代碼在執(zhí)行過(guò)程中與前端集成調(diào)試環(huán)境進(jìn)行通信,模擬實(shí)現(xiàn)斷點(diǎn)效果; 變量觀(guān)測(cè)插樁,使得經(jīng)插樁的代碼與前端集成調(diào)試環(huán)境之間進(jìn)行通信,在斷點(diǎn)處傳輸有效變量信息并顯示給用戶(hù); 性能分析插樁,使得經(jīng)插樁的代碼在執(zhí)行過(guò)程中與前端集成調(diào)試環(huán)境之間進(jìn)行通信傳遞并行程序的性能參數(shù),并在前端集成調(diào)試環(huán)境中實(shí)現(xiàn)性能觀(guān)測(cè)與記錄。
18.根據(jù)權(quán)利要求17所述的方法,其特征在于,所述實(shí)際需求通過(guò)插樁需求描述文件的方式傳遞給源代碼插樁模塊,源代碼插樁模塊根據(jù)插樁需求描述文件給出的信息,調(diào)用相應(yīng)的接口,對(duì)待調(diào)試的程序源代碼進(jìn)行自動(dòng)插樁。
19.根據(jù)權(quán)利要求18所述的方法,其特征在于,所述插樁需求描述文件包括斷點(diǎn)管理需求描述文件、變量觀(guān)測(cè)需求描述文件或性能分析需求描述文件。
20.根據(jù)權(quán)利要求19所述的方法,其特征在于,所述斷點(diǎn)管理需求描述文件的內(nèi)容主要來(lái)自于用戶(hù)通過(guò)前端集成調(diào)試模塊的界面子模塊設(shè)置的各種類(lèi)型靜態(tài)斷點(diǎn)以及條件斷點(diǎn)。
21.根據(jù)權(quán)利要求20所述的方法,其特征在于,所述變量觀(guān)測(cè)和性能分析需求描述文件的內(nèi)容主要來(lái)自于各個(gè)變量的作用域、類(lèi)型等信息以及待調(diào)試的并行程序的各指導(dǎo)語(yǔ)句所在位置的信息。
22.根據(jù)權(quán)利要求21所述的方法,其特征在于,所述變量觀(guān)測(cè)和性能分析需求描述文件的內(nèi)容根據(jù)在插樁之前對(duì)待調(diào)試的程序的源代碼進(jìn)行詞法和語(yǔ)法分析,構(gòu)造出的相應(yīng)的語(yǔ)法樹(shù)生成。
23.根據(jù)權(quán)利要求22所述的方法,其特征在于,所述方法還包括根據(jù)用戶(hù)所編寫(xiě)的規(guī)則及每條規(guī)則所對(duì)應(yīng)的處理語(yǔ)句生成用于分析和處理待調(diào)試的程序的解析程序,所述解析程序根據(jù)編寫(xiě)指定的規(guī)則對(duì)待調(diào)試的程序進(jìn)行詞法和語(yǔ)法分析,并在執(zhí)行每條規(guī)則所對(duì)應(yīng)的處理語(yǔ)句構(gòu)建語(yǔ)法樹(shù)。
全文摘要
本發(fā)明公開(kāi)了一種并行程序的調(diào)試系統(tǒng),用于信息技術(shù)領(lǐng)域,以針對(duì)現(xiàn)有技術(shù)存在的并行程序調(diào)試的不足,提供一種能夠?qū)崿F(xiàn)跨平臺(tái)應(yīng)用的并行程序的調(diào)試系統(tǒng)及方法,具體包括前端集成調(diào)試模塊,用來(lái)給用戶(hù)提供調(diào)試窗口,對(duì)待調(diào)試的并行程序進(jìn)行調(diào)試操作;后臺(tái)調(diào)試管理模塊,用來(lái)根據(jù)前端集成調(diào)試模塊發(fā)來(lái)的調(diào)試命令,通過(guò)源代碼插樁,并對(duì)插樁后的并行程序進(jìn)行編譯運(yùn)行,并將運(yùn)行的結(jié)果反饋給前端集成調(diào)試模塊。本發(fā)明實(shí)施例的并行程序調(diào)試方法及系統(tǒng)方便用戶(hù)編輯調(diào)試代碼、設(shè)置并行程序運(yùn)行斷點(diǎn),并能通過(guò)遠(yuǎn)程調(diào)用的方式編譯、運(yùn)行、調(diào)試并行程序,以及查看性能分析結(jié)果,具有很好的移植性和可擴(kuò)展性。
文檔編號(hào)G06F11/36GK102789413SQ20111027103
公開(kāi)日2012年11月21日 申請(qǐng)日期2011年9月14日 優(yōu)先權(quán)日2011年5月23日
發(fā)明者孫海平, 張棟良, 柴華, 石琴琴, 蔣昌俊, 閆春鋼, 陳閎中 申請(qǐng)人:同濟(jì)大學(xué)