本發(fā)明屬于軟件調(diào)試的技術(shù)領(lǐng)域,特別涉及一種基于IC TraceBuffer的調(diào)試系統(tǒng)及方法。
背景技術(shù):
IC TraceBuffer就是IC內(nèi)部一塊很小的Memory,主要是用來存放IC執(zhí)行過的痕跡,即被執(zhí)行過的指令,但是由于Memory很小,所以保存的指令數(shù)據(jù)有效,通常保存最新執(zhí)行的幾條指令,早期的執(zhí)行指令不斷被覆蓋的調(diào)試方法及系統(tǒng)。
目前各種各樣的應(yīng)用程序應(yīng)有盡有,這些應(yīng)用程序基本上都是使用開發(fā)語言和一個調(diào)試器來進(jìn)行開發(fā)、調(diào)試,但是調(diào)試器一般都是集成到集成開發(fā)環(huán)境(IDE)中,因此大部分開發(fā)者都是使用IDE來進(jìn)行開發(fā)應(yīng)用程序,但是不管是高階開發(fā)語言,如C、C++、Java等,還是低階開發(fā)語言,如匯編語言PIC、6502匯編等,對于開發(fā)者來說,編寫完代碼執(zhí)行過程上遇到問題,那么必須依靠調(diào)試器來進(jìn)行調(diào)試、跟蹤并找出問題,進(jìn)而解決問題,最后才能發(fā)布,大部分的應(yīng)用程序在遇到bugs的時候基本上都可以通過調(diào)試器即可比較容易地找出問題,但是針對使用匯編編寫的嵌入式大代碼量程序,在遇到問題的時候查找就不那么容易,特別是針對這樣場景下的應(yīng)用程序:程序在運(yùn)行的過程中莫名其妙就復(fù)位或者跑飛了,這種情況下依賴調(diào)試器查找起來也非常棘手,即使有Call Stack,調(diào)試器也無法知道復(fù)位之前執(zhí)行了哪些指令,因為最有可能出現(xiàn)問題的地方是復(fù)位之前執(zhí)行的那幾條指令導(dǎo)致或者跟它們相關(guān)。
技術(shù)實現(xiàn)要素:
基于此,因此本發(fā)明的首要目地是提供一種基于IC TraceBuffer的調(diào)試方法,該方法能夠在傳統(tǒng)調(diào)試器難以找出問題的情況下盡可能快的找出bugs,提高調(diào)試效率,縮短調(diào)試時間。
為實現(xiàn)上述目的,本發(fā)明的技術(shù)方案為:
一種基于IC TraceBuffer的調(diào)試方法,其特征在于該方法通過解析TraceBuffer數(shù)據(jù)模塊解析TraceBuffer中內(nèi)容為對應(yīng)的匯編指令,并使用顯示模塊將圖形界面顯示出來并依賴調(diào)試信息進(jìn)而找到出錯程序附近的行。
進(jìn)一步,所述解析TraceBuffer數(shù)據(jù)模塊首先連接設(shè)備,然后獲取IC TraceBuffer內(nèi)容,并對獲取的TraceBuffer數(shù)據(jù)進(jìn)行分析,得到對應(yīng)的指令,如:movwf 0x100,最后結(jié)合調(diào)試信息,得到源代碼中真正的指令,如:movfw TimerID。
進(jìn)一步,所述方法通過顯示模塊把解析TraceBuffer數(shù)據(jù)模塊中獲取到的指令信息用圖形界面顯示出來,方便用戶查看,并且允許用戶在顯示指令的界面上雙擊對應(yīng)的指令信息行能快速定位到該指令對應(yīng)的源代碼行中。
進(jìn)一步,該方法具體的實現(xiàn)步驟是:
101、當(dāng)調(diào)試器中斷下來,解析TraceBuffer數(shù)據(jù)模塊連接硬件設(shè)備;
所述調(diào)試器中斷下來,是指調(diào)試器執(zhí)行Step Out、Step Into、Step Over指令停下來。
102、獲取IC TraceBuffer數(shù)據(jù),針對數(shù)據(jù)進(jìn)行分析,獲取每一條指令對應(yīng)的信息,
所述信息包含:地址、指令機(jī)器碼、指令周期、指令類型(Read or Write or ReadWrite)。
103、解析TraceBuffer數(shù)據(jù)模塊結(jié)合所述信息把指令Machine Code轉(zhuǎn)換為指令OPCode,如把:0x12 0x23轉(zhuǎn)換為movwf 0x03;
104、解析TraceBuffer數(shù)據(jù)模塊結(jié)合調(diào)試的信息再把指令OPCode轉(zhuǎn)換為真正的源碼,如:movwf TimerID;
105、顯示模塊負(fù)責(zé)把解析TraceBuffer數(shù)據(jù)模塊解析獲取的指令用圖形界面的方式給顯示出來。
解析TraceBuffer數(shù)據(jù)模塊將數(shù)據(jù)進(jìn)行分析并轉(zhuǎn)換指令,能夠保證結(jié)合調(diào)試信息及時、準(zhǔn)確地找到對應(yīng)的指令,再把解析后的指令信息顯示在圖形界面上,通過圖形界面用戶可以看到當(dāng)前IC的執(zhí)行痕跡,雙擊用戶圖形界面中List控件中的任何一行該模塊會結(jié)合調(diào)試信息和指令信息定位到源碼對應(yīng)的行號上,協(xié)助用戶定位問題。
本發(fā)明所實現(xiàn)的調(diào)試方法,通過解析TraceBuffer數(shù)據(jù)模塊結(jié)合顯示模塊,能夠在傳統(tǒng)調(diào)試器難以找出問題的情況下盡可能快的找出bugs,提高調(diào)試效率,縮短調(diào)試時間。
附圖說明
圖1是本發(fā)明所實施的調(diào)試控制流程圖。
圖2是本發(fā)明所實施的顯示控制流程圖。
圖3是本發(fā)明所實施的顯示界面的示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
圖1所示,為本發(fā)明所實施的基于IC TraceBuffer的調(diào)試方法控制流程圖,圖中所示,解析TraceBuffer數(shù)據(jù)模塊當(dāng)調(diào)試器中斷下來(即執(zhí)行Step Out、Step Into、Step Over停下來后),通過連接上硬件設(shè)備,獲取IC TraceBuffer數(shù)據(jù),針對數(shù)據(jù)進(jìn)行分析,獲取每一條指令對應(yīng)的信息,這些信息包含:地址、指令機(jī)器碼、指令周期、指令類型(Read or Write or ReadWrite),然后結(jié)合指令信息把指令Machine Code轉(zhuǎn)換為指令OPCode,如把:0x12 0x23轉(zhuǎn)換為movwf 0x03,最后結(jié)合調(diào)試信息在把movwf 0x03轉(zhuǎn)換為真正的源碼,如:movwf TimerID。
具體步驟為:
S101、調(diào)試器中斷后,解析TraceBuffer數(shù)據(jù)模塊連接硬件設(shè)備。
S102、連接成功后,獲取TraceBuffer數(shù)據(jù)集。數(shù)據(jù)集包含:地址、指令機(jī)器碼、指令周期、指令類型(Read or Write or ReadWrite)。
S103、從TraceBuffer數(shù)據(jù)集中提取指令數(shù)據(jù)。
S104、提取成功后,分析指令數(shù)據(jù),獲取該條指令對應(yīng)的Address、Cycle、Inse、Type、Code Bytes、Instruction等數(shù)據(jù)。
在該步驟中,獲取完該條指令對應(yīng)的數(shù)據(jù)后,結(jié)合指令信息把指令Machine Code轉(zhuǎn)換為指令OPCode。
S105、結(jié)合調(diào)試信息,將上述數(shù)據(jù)轉(zhuǎn)換為源碼中對應(yīng)的指令。
S106、保存S105步驟獲得的指令信息到指令數(shù)據(jù)容器中。
S107、重復(fù)S103-S106步驟,直至所有的數(shù)據(jù)都轉(zhuǎn)換保存完畢。
如圖2所示,顯示指令模塊負(fù)責(zé)把(1)模塊中解析獲取的指令用圖形界面的方式給顯示出來,方便用戶查看指令,通過圖形界面用戶可以看到當(dāng)前IC指令的執(zhí)行痕跡,雙擊用戶圖形界面中List控件中的任何一行該模塊會結(jié)合調(diào)試信息和指令信息定位到源碼對應(yīng)的行號上,協(xié)助用戶定位問題。其具體的步驟為:
S201、初始化TraceBuffer指令視圖;
S202、獲取指令保存解析后的指令數(shù)據(jù)容器;
S203、從上述容器中依次提取指令數(shù)據(jù);
S204、讀取成功后按照顯示格式將指令數(shù)據(jù)進(jìn)行格式化;
S205、將格式化的指令內(nèi)容插入到圖形控件中;然后重復(fù)S203-S205步驟,直至提前容器中的所有數(shù)據(jù);
S206、顯示TraceBuffer指令視圖。
再參見圖3所示,#為顯示每條指令的流水號,Address為顯示每條指令的起始地址,Cycles為顯示執(zhí)行每條指令的周期,Code Bytes為顯示每條指令對應(yīng)的機(jī)器碼,Instruction為顯示每條指令,Type為顯示每條指令類型,如Read、Write、ReadWrite。
當(dāng)用戶嵌入式程序莫名其妙Reset,很難定位出問題的時候,此時用戶可以依靠本專利提到的技術(shù)來協(xié)助定位問題,這里假如獲取當(dāng)時的TraceBuffer數(shù)據(jù)顯示出來如上圖所示,那么出錯前IC執(zhí)行的最近指令有以上4條,當(dāng)然依靠TraceBuffer的大小,如果TraceBuffer再大,這里顯示的內(nèi)容會更多,此時用戶在第二行位置上雙擊,該模塊就會結(jié)合指令信息和調(diào)試信息定位到源代碼行上如:15MOVFW TimerID(15是行號),但是這是針對匯編源文件的情況,如果針對C源文件,由于一條C源文件可能對應(yīng)多行匯編程序,因此可能雙擊上面多行均對應(yīng)到同一行C源文件中,這樣均都可以協(xié)助用戶定位并找出難于發(fā)現(xiàn)的問題。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。