[發明專利]Linux系統崩潰時內核函數調用棧分析調試方法有效
| 申請號: | 201310069706.9 | 申請日: | 2013-03-05 |
| 公開(公告)號: | CN103106132A | 公開(公告)日: | 2013-05-15 |
| 發明(設計)人: | 張志 | 申請(專利權)人: | 中標軟件有限公司 |
| 主分類號: | G06F11/34 | 分類號: | G06F11/34;G06F11/36 |
| 代理公司: | 北京聿宏知識產權代理有限公司 11372 | 代理人: | 吳大建;鐘日紅 |
| 地址: | 200030 上海*** | 國省代碼: | 上海;31 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | linux 系統 崩潰 內核 函數 調用 分析 調試 方法 | ||
技術領域
本發明涉及Linux操作系統內核技術、編譯器技術和MIPS體系結構技術,具體地,說涉及一種MIPS構架下Linux系統崩潰時內核函數調用棧分析調試方法。
背景技術
隨著國家對自主可控的不斷重視,MIPS構架的龍芯處理器得到越來越深入的推廣,解決其軟件支持和調試能力的問題顯得越來越重要,特別是支持在其上運行Linux操作系統。現有的crash調試工具不能很好地支持在國產MIPS構架的龍芯服務器下實現崩潰內核函數調用分析與調試功能。在不能對系統崩潰時的函數調用棧進行分析的情況下,內核開發人員找出并解決系統的崩潰原因的詳細信息將是十分困難的。
在傳統技術中,會根據函數調用時被保存到幀指針寄存器中的棧指針寄存器的內容、以及在棧空間中保存的用于保存棧指針寄存器的內容之前幀指針寄存器的內容,來對系統崩潰時的函數調用棧進行分析。這樣就能夠找出函數調用關系(參考圖3示出的帶幀指針函數調用棧結構示意圖)。然而,為了節省一個寄存器,MIPS構架下龍芯內核編譯時gcc可以不分配幀指針寄存器,這樣可以在寄存器分配時節省一個寄存器,提高系統性能,但卻使得不能通過幀指針來分析棧空間中的函數調用關系。如何在即使不分配幀指針寄存器時也能夠準確快速地分析棧空間中的函數調用關系,是一個推動MIPS架構處理器發展的關鍵的技術問題。
具體地,在傳統的函數調用棧分析調試中使用了幀指針寄存器,在函數調用時,將幀指針寄存器保存的棧空間中,可以得到一個函數幀的大小,但是這樣會浪費一個寄存器,這樣會導致性能下降,GCC編譯器有一個功能omit-frame-pointer,不使用幀寄存器,這樣就可以節約一個寄存器,可以提高系統性能,但是在分析函數調用棧時就不好找到函數的幀。因此,研究崩潰內核函數調用棧是一件很有實用價值和意義的工作。
發明內容
本發明所要解決的技術問題之一是需要提供一種能夠在系統崩潰時即使不分配幀指針寄存器也能夠快速分析棧空間中的函數調用關系的Linux系統崩潰時內核函數調用棧分析調試方法。
為了解決上述技術問題,本發明提供了一種Linux系統崩潰時內核函數調用棧分析調試方法。該方法包括:
讀取帶調試信息的內核和Linux系統崩潰時的內核轉儲文件;
讀取Linux系統崩潰時函數棧指針寄存器r29的值,根據棧指針寄存器r29獲取指向系統崩潰時正在運行的函數的函數返回地址;
判斷當前程序計數器所指向的指令是否滿足操作碼是daddiu指令且源和目的操作數均是棧指針寄存器r29,若判斷為滿足,則解析出該當前指令中的immediate字段,并對immediate字段進行符號擴展,將擴展后immediate字段的與棧指針寄存器r29的值相減,得出函數棧幀的大小;
將棧指針寄存器r29中的值與所得出的函數棧幀的大小相減,得到當前函數的上一個函數的地址。
進一步,對函數調用棧進行分析調試的處理包括:根據函數的函數返回地址,查找帶調試信息的內核中的符號表,得到當前函數的名稱;根據函數的名稱確定函數的參數;以及根據所確定的函數的參數,從函數調用棧中讀取傳遞給函數的參數。
進一步,在讀取帶調試信息的內核和Linux系統崩潰時的內核轉儲文件之前,還包括:
在Linux系統崩潰時,利用kdump轉儲內核并通過makedumpfile對所轉儲的內核進行壓縮,得到所述內核轉儲文件。
進一步,所述Linux系統不使用幀寄存器。
進一步,所述Linux系統具體為MIPS構架下的Linux系統。
進一步,所述Linux系統具體為安裝于龍芯平臺的MIPS構架下的Linux系統。
此外,所述讀取Linux系統崩潰時函數棧指針寄存器r29的值的步驟進一步包括:通過讀取崩潰進程的thread_info結構中的kpc成員來讀取棧指針寄存器r29的內容。
進一步,該方法還可包括:若判斷為不滿足,則將程序計數器加4,繼續判斷當前程序計數器所指向的指令是否滿足操作碼是daddiu指令且源和目的操作數均是棧指針寄存器r29。
其中,所述Linux系統是進行了如下編譯選項設置而編譯得到的Linux系統:
選中了CONFIG_KEXEC_CRASH、CONFIG_KEXEC、CONFIG_SYSFS、CONFIG_DEBUG_INFO選項。
與現有技術相比,本發明的一個或多個實施例可以具有如下優點:
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中標軟件有限公司,未經中標軟件有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310069706.9/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:治療皮膚潰瘍的中藥制劑及其制備方法
- 下一篇:換氣裝置安裝結構





