一種linux系統(tǒng)下用戶態(tài)進程異常的分析方法
【專利摘要】本發(fā)明公開了一種linux系統(tǒng)下用戶態(tài)進程異常的分析方法,本方法通過進程自身接管特定的信號獲取異常時的任務上下文并按體系結(jié)構(gòu)解析任務堆棧實現(xiàn)了對異常的分析。本方案能夠協(xié)助軟件開發(fā)人員快速準確定位并解決軟件BUG。
【專利說明】
-種I inux系統(tǒng)下用戶態(tài)進程異常的分析方法
技術(shù)領域
[0001] 本發(fā)明設及軟件系統(tǒng)技術(shù),具體設及軟件系統(tǒng)中調(diào)試分析技術(shù)。
【背景技術(shù)】
[0002] 現(xiàn)有的gdb調(diào)試技術(shù)已經(jīng)有截獲異常并分析包括進程函數(shù)調(diào)用關(guān)系在內(nèi)的多數(shù)調(diào) 試信息的能力。
[0003] 但在實際使用和測試過程中不可能開著gdb運行,如果運時程序出BUG,開發(fā)人員 就并不清楚具體發(fā)生了什么錯誤,運會導致解決BUG的時間被延遲,影響開發(fā)人員調(diào)試工作 效率,如果BUG不易復現(xiàn),則情況會變得更加嚴重。
[0004] 由此可見,提供一種準確高效的BUG定位技術(shù)是本領域亟需解決的問題。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明針對現(xiàn)有l(wèi)inux應用軟件開發(fā)中BUG調(diào)試過程長,影響軟件開發(fā)人員調(diào)試工 作效率的問題,而提供一種準確、高效的BUG定位方案,能極大的降低軟件開發(fā)的調(diào)試難度, 顯著提高軟件BUG解決效率。
[0006] 為了達到上述目的,本發(fā)明采用如下的技術(shù)方案:
[0007] -種linux系統(tǒng)下用戶態(tài)進程異常的分析方法,所述分析方法通過進程自身來進 行異常分析。
[000引優(yōu)選的,所述分析方法通過在進程自身增加異常分析功能,由進程本身進行解析 異常原因。
[0009] 優(yōu)選的,所述分析方法中通過進程自身接管特定的信號來獲取異常時的任務上下 文,并按體系結(jié)構(gòu)解析任務堆找,實現(xiàn)對異常的分析。
[0010] 優(yōu)選的,所述分析方法具體包括如下步驟:
[0011] (1)進程啟動后接管要進行異常分析的信號,并重新設置信號處理程序;
[0012] (2)當接管的信號發(fā)生時,系統(tǒng)將自動調(diào)用之前設置的信號處理程序,即跳到步驟 (3);
[0013] (3)獲取異常類型、異常線程的名稱,按CPU的體系結(jié)構(gòu)獲取異常時CPU寄存器上下 文;
[0014] (4)根據(jù)異常時CPU的寄存器獲取任務堆找信息;
[0015] (5)根據(jù)異常時CPU的寄存器、任務堆找信息分析得到異常指令、異常函數(shù)及異常 函數(shù)的調(diào)用關(guān)系;
[0016] (6)輸出解析后的異常信息;
[0017] (7)記錄解析后的異常信息。
[001引優(yōu)選的,所述步驟(3)中CPU的體系結(jié)構(gòu)為MIPS。
[0019] 優(yōu)選的,所述步驟(6)中通過10系統(tǒng)輸出解析后的異常信息。
[0020] 優(yōu)選的,所述步驟(7)中通過日志系統(tǒng)記錄解析后的異常信息。
[0021] 本發(fā)明通過給進程自身增加異常分析功能,使進程本身具有解析異常原因的能 力,輔助開發(fā)人員調(diào)試和解決問題,從而提供一種準確高效的BUG定位手段,能極大的降低 軟件開發(fā)的調(diào)試難度,顯著提高軟件BUG解決效率。
【附圖說明】
[0022] W下結(jié)合附圖和【具體實施方式】來進一步說明本發(fā)明。
[0023] 圖1為本發(fā)明實施中獲取異常函數(shù)調(diào)用關(guān)系的流程圖。
【具體實施方式】
[0024] 為了使本發(fā)明實現(xiàn)的技術(shù)手段、創(chuàng)作特征、達成目的與功效易于明白了解,下面結(jié) 合具體圖示,進一步闡述本發(fā)明。
[0025] 本實例WMIPS處理器運行l(wèi)inux多線程系統(tǒng)為例進一步說明本發(fā)明方案具體的實 施過程,具體實施步驟如下:
[00%] 1.進程啟動后接管要進行異常分析的信號:SIGILL、SIGBUS、SIGFPE、SIGSEGV、 SIGI0信號,并重新設置信號處理程序;
[0027] 2.當上述信號發(fā)生時,系統(tǒng)會自動調(diào)用之前設置的信號處理程序,即跳到步驟 (3);
[0028] 3.獲取異常類型、異常線程的名稱,按CPU的體系結(jié)構(gòu)獲取異常時CPU寄存器上下 文:
[0029] 入?yún)?為信號類型,通過gettid獲取線程id,入?yún)?中獲取異常時MIPS寄存器上下 文,其格式如下所示:
[0030]
[0031] 4. Wsc_regs[29]為找頂獲取任務堆找信息;
[0032] 5. sc_pc為異常指令,查找符號表可獲取異常函數(shù),再根據(jù)MIPS寄存器上下文、任 務堆找信息分析得到異常函數(shù)的調(diào)用關(guān)系,具體過程如下(參見圖1):
[0033] 51.從寄存器上下文的sc_pc獲取pc;
[0034] 52.從寄存器上下文的sc_regs[29]獲取本級找帖;
[0035] 53.判斷獲取的pc是否合法:若合法,轉(zhuǎn)入步驟(54),若不符合,結(jié)束本次分析;
[0036] 54.按pc查找符號表,再把pc指向?qū)暮瘮?shù)入口;
[0037] 55.分析pc處的指令是否為分配本級找帖指令:若不是(即為葉子函數(shù)),轉(zhuǎn)入步驟 (56);若是(即為非葉子函數(shù)),則轉(zhuǎn)入步驟(58);
[0038] 56.確定上級找帖即為本級找帖;
[0039] 57.從寄存器上下文的sc_regs[31]獲取ra,并執(zhí)行步驟(61);
[0040] 58.計算獲取上級找帖pc指向下條指令;
[0041] 59.分析pc處的指令是否為ra入找指令:若不是且分支不可達,則結(jié)束本次分析; 若是,則轉(zhuǎn)入步驟(60);
[0042] 60.獲取 ra;
[0043] 61 .pc指向ra繼續(xù)分析上級找帖,并轉(zhuǎn)入步驟(53);
[0044] 6.通過printf ()函數(shù)輸出解析后的異常信息;
[0045] 7.在非易失性隨機訪問存儲器中記錄解析后的異常信息,用于W后查看異常信 息。
[0046] 通過上述實例可知,通過進程自身接管特定的信號來獲取異常時的任務上下文, 并按體系結(jié)構(gòu)解析任務堆找,實現(xiàn)對異常的分析,能夠快速、準確的定位軟件BUG。
[0047] 本實例方案適用于輔助開發(fā)人員在MIPS體系結(jié)構(gòu)的linux系統(tǒng)中調(diào)試BUG。
[0048] 再者,基于上述實例方案,所有體系結(jié)構(gòu)的CPU及類Unix系統(tǒng)都能變通實現(xiàn),其原 理都如上所述,此處不加 W寶述。
[0049] W上顯示和描述了本發(fā)明的基本原理、主要特征和本發(fā)明的優(yōu)點。本行業(yè)的技術(shù) 人員應該了解,本發(fā)明不受上述實施例的限制,上述實施例和說明書中描述的只是說明本 發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下,本發(fā)明還會有各種變化和改進,運些變 化和改進都落入要求保護的本發(fā)明范圍內(nèi)。本發(fā)明要求保護范圍由所附的權(quán)利要求書及其 等效物界定。
【主權(quán)項】
1. 一種1 inux系統(tǒng)下用戶態(tài)進程異常的分析方法,其特征在于,所述分析方法通過進程 自身來進行異常分析。2. 根據(jù)權(quán)利要求1所述的一種linux系統(tǒng)下用戶態(tài)進程異常的分析方法,其特征在于, 所述分析方法通過在進程自身增加異常分析功能,由進程本身進行解析異常原因。3. 根據(jù)權(quán)利要求2所述的一種linux系統(tǒng)下用戶態(tài)進程異常的分析方法,其特征在于, 所述分析方法中通過進程自身接管特定的信號來獲取異常時的任務上下文,并按體系結(jié)構(gòu) 解析任務堆棧,實現(xiàn)對異常的分析。4. 根據(jù)權(quán)利要求3所述的一種linux系統(tǒng)下用戶態(tài)進程異常的分析方法,其特征在于, 所述分析方法具體包括如下步驟: (1) 進程啟動后接管要進行異常分析的信號,并重新設置信號處理程序; (2) 當接管的信號發(fā)生時,系統(tǒng)將自動調(diào)用之前設置的信號處理程序,即跳到步驟(3); (3) 獲取異常類型、異常線程的名稱,按CRJ的體系結(jié)構(gòu)獲取異常時CRJ寄存器上下文; (4) 根據(jù)異常時CRJ的寄存器獲取任務堆棧信息; (5) 根據(jù)異常時CPU的寄存器、任務堆棧信息分析得到異常指令、異常函數(shù)及異常函數(shù) 的調(diào)用關(guān)系; (6) 輸出解析后的異常信息; (7) 記錄解析后的異常信息。5. 根據(jù)權(quán)利要求4所述的一種linux系統(tǒng)下用戶態(tài)進程異常的分析方法,其特征在于, 所述步驟(3)中CPU的體系結(jié)構(gòu)為MIPS。6. 根據(jù)權(quán)利要求4所述的一種linux系統(tǒng)下用戶態(tài)進程異常的分析方法,其特征在于, 所述步驟(6)中通過10系統(tǒng)輸出解析后的異常信息。7. 根據(jù)權(quán)利要求4所述的一種linux系統(tǒng)下用戶態(tài)進程異常的分析方法,其特征在于, 所述步驟(7)中通過日志系統(tǒng)記錄解析后的異常信息。
【文檔編號】G06F11/36GK105824749SQ201610131609
【公開日】2016年8月3日
【申請日】2016年3月9日
【發(fā)明人】王仁雷, 茍利平
【申請人】上海博達數(shù)據(jù)通信有限公司