System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內(nèi)的位置。 參數(shù)名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術(shù)實(shí)現(xiàn)步驟摘要】
本申請涉及計(jì)算機(jī)信息處理領(lǐng)域,具體而言,涉及一種基于用戶態(tài)命令的cpu的內(nèi)核調(diào)用棧獲取方法及裝置。
技術(shù)介紹
1、在arm64架構(gòu)中,函數(shù)調(diào)用的管理依賴于精心設(shè)計(jì)的堆棧機(jī)制。這個機(jī)制的核心在于兩個關(guān)鍵的寄存器:幀指針(fp)和堆棧指針(sp)。fp寄存器指向當(dāng)前函數(shù)棧幀的底部,而sp寄存器則指向棧頂。這種設(shè)計(jì)使得技術(shù)人員能夠高效地在函數(shù)調(diào)用之間傳遞參數(shù)和返回值。
2、具體來說,每當(dāng)一個函數(shù)被調(diào)用時,它的返回地址(存儲在鏈接寄存器lr中)會被壓入棧中。通過訪問fp寄存器,技術(shù)人員可以找到這個存儲在棧中的lr值,即函數(shù)的返回地址。此外,棧中還保存了上一級函數(shù)的fp寄存器值,它指向了上一級函數(shù)的棧底。利用這種鏈?zhǔn)浇Y(jié)構(gòu),技術(shù)人員可以逐級回溯,找到整個函數(shù)調(diào)用鏈中的每一個函數(shù)及其對應(yīng)的棧幀信息。這個過程被稱為棧回溯,棧回溯對于調(diào)試、性能分析和故障排查等場景至關(guān)重要。
3、在多處理器系統(tǒng)中,某些硬件設(shè)備可能需要跨多個處理器共享中斷處理任務(wù)。為了應(yīng)對這種需求,引入了ipi(處理器間中斷)機(jī)制。當(dāng)一個處理器接收到一個中斷請求時,它可以利用ipi將這一請求發(fā)送給系統(tǒng)中的其他處理器,以觸發(fā)相應(yīng)的中斷處理程序。
4、在復(fù)雜的系統(tǒng)環(huán)境中,了解cpu當(dāng)前正在執(zhí)行的任務(wù)和調(diào)用棧信息對于問題分析和定位至關(guān)重要。然而,一個常見的難題是用戶態(tài)程序無法直接訪問內(nèi)核態(tài)的信息。傳統(tǒng)的做法是通過進(jìn)入kdb(內(nèi)核調(diào)試器)環(huán)境,執(zhí)行如bt或btc等命令來查看cpu的調(diào)用棧。但這種方法有一個顯著的缺點(diǎn):它會導(dǎo)致所有cpu進(jìn)入暫停狀態(tài),從而可
5、因此,需要一種新的基于用戶態(tài)命令的cpu的內(nèi)核調(diào)用棧獲取方法及裝置。
6、在所述
技術(shù)介紹
部分公開的上述信息僅用于加強(qiáng)對本申請的背景的理解,因此它可以包括不構(gòu)成對本領(lǐng)域普通技術(shù)人員已知的現(xiàn)有技術(shù)的信息。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本申請?zhí)峁┮环N基于用戶態(tài)命令的cpu的內(nèi)核調(diào)用棧獲取方法及裝置,能夠在不造成長時間業(yè)務(wù)中斷的情況下,通過用戶態(tài)的可維護(hù)命令來獲取arm64架構(gòu)下內(nèi)核態(tài)cpu的當(dāng)前調(diào)用棧信息,提升系統(tǒng)調(diào)試、性能分析以及故障排查效率。
2、本申請的其他特性和優(yōu)點(diǎn)將通過下面的詳細(xì)描述變得顯然,或部分地通過本申請的實(shí)踐而習(xí)得。
3、根據(jù)本申請的一方面,提出一種基于用戶態(tài)命令的cpu的內(nèi)核調(diào)用棧獲取方法,該方法包括:在用戶態(tài)中通過輸入?yún)?shù)生成內(nèi)核調(diào)用棧獲取命令;根據(jù)所述內(nèi)核調(diào)用棧獲取命令確定目標(biāo)cpu;執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以向所述目標(biāo)cpu發(fā)送ipi核間中斷請求;基于所述ipi核間中斷請求所述目標(biāo)cpu通過預(yù)設(shè)接口獲取內(nèi)核調(diào)用棧的數(shù)據(jù);將所述數(shù)據(jù)儲存在預(yù)設(shè)字符數(shù)組中;再次執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以由所述預(yù)設(shè)字符數(shù)組獲取內(nèi)核調(diào)用棧的數(shù)據(jù)。
4、在本申請的一種示例性實(shí)施例中,在用戶態(tài)中通過輸入?yún)?shù)生成內(nèi)核調(diào)用棧獲取命令,包括:在用戶態(tài)創(chuàng)建作為cpu內(nèi)核調(diào)用棧的入口的可維護(hù)命令;通過輸入?yún)?shù)和可維護(hù)命令生成內(nèi)核調(diào)用棧獲取命令。
5、在本申請的一種示例性實(shí)施例中,根據(jù)所述內(nèi)核調(diào)用棧獲取命令確定目標(biāo)cpu,包括:判斷所述內(nèi)核調(diào)用棧獲取命令中輸入?yún)?shù)的有效性;在輸入?yún)?shù)的有效時,確定目標(biāo)cpu。
6、在本申請的一種示例性實(shí)施例中,執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以向所述目標(biāo)cpu發(fā)送ipi核間中斷請求,包括:執(zhí)行所述內(nèi)核調(diào)用棧獲取命令;向所述目標(biāo)cpu發(fā)送ipi核間中斷請求以觸發(fā)不可屏蔽的中斷操作;所述目標(biāo)cpu進(jìn)行中斷處理流程。
7、在本申請的一種示例性實(shí)施例中,執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以向所述目標(biāo)cpu發(fā)送ipi核間中斷請求,還包括:傳送全局變量標(biāo)記,所述全局變量標(biāo)記標(biāo)識所述中斷操作為所述內(nèi)核調(diào)用棧獲取命令觸發(fā)。
8、在本申請的一種示例性實(shí)施例中,基于所述ipi核間中斷請求所述目標(biāo)cpu通過預(yù)設(shè)接口獲取內(nèi)核調(diào)用棧的數(shù)據(jù),包括:在預(yù)設(shè)接口獲取全局變量參數(shù)時,獲取所述目標(biāo)cpu的標(biāo)識;基于所述目標(biāo)cpu的標(biāo)識獲取寄存器的值,所述寄存器包括fp、sp、pc寄存器;通過所述寄存器的值獲取內(nèi)核調(diào)用棧的數(shù)據(jù)。
9、在本申請的一種示例性實(shí)施例中,通過所述寄存器的值獲取內(nèi)核調(diào)用棧的數(shù)據(jù),包括:通過所述寄存器的值追蹤內(nèi)核調(diào)用棧的棧幀;將棧幀逐層展開;獲取每層的pc寄存器的值以生成所述內(nèi)核調(diào)用棧的數(shù)據(jù)。
10、在本申請的一種示例性實(shí)施例中,將所述數(shù)據(jù)儲存在預(yù)設(shè)字符數(shù)組中,還包括:將全局變量標(biāo)記復(fù)原。
11、在本申請的一種示例性實(shí)施例中,再次執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以由所述預(yù)設(shè)字符數(shù)組獲取內(nèi)核調(diào)用棧的數(shù)據(jù),包括:設(shè)定休眠間隔時間;在休眠間隔時間之后,再次執(zhí)行所述內(nèi)核調(diào)用棧獲取命令;由所述預(yù)設(shè)字符數(shù)組獲取內(nèi)核調(diào)用棧的數(shù)據(jù)。
12、根據(jù)本申請的一方面,提出一種基于用戶態(tài)命令的cpu的內(nèi)核調(diào)用棧獲取裝置,該裝置包括:命令模塊,用于在用戶態(tài)中通過輸入?yún)?shù)生成內(nèi)核調(diào)用棧獲取命令;目標(biāo)模塊,用于根據(jù)所述內(nèi)核調(diào)用棧獲取命令確定目標(biāo)cpu;請求模塊,用于執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以向所述目標(biāo)cpu發(fā)送ipi核間中斷請求;數(shù)據(jù)模塊,用于基于所述ipi核間中斷請求所述目標(biāo)cpu通過預(yù)設(shè)接口獲取內(nèi)核調(diào)用棧的數(shù)據(jù);儲存模塊,用于將所述數(shù)據(jù)儲存在預(yù)設(shè)字符數(shù)組中;執(zhí)行模塊,用于再次執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以由所述預(yù)設(shè)字符數(shù)組獲取內(nèi)核調(diào)用棧的數(shù)據(jù)。
13、根據(jù)本申請的一方面,提出一種電子設(shè)備,該電子設(shè)備包括:一個或多個處理器;存儲裝置,用于存儲一個或多個程序;當(dāng)一個或多個程序被一個或多個處理器執(zhí)行,使得一個或多個處理器實(shí)現(xiàn)如上文的方法。
14、根據(jù)本申請的一方面,提出一種計(jì)算機(jī)可讀介質(zhì),其上存儲有計(jì)算機(jī)程序,該程序被處理器執(zhí)行時實(shí)現(xiàn)如上文中的方法。
15、根據(jù)本申請的基于用戶態(tài)命令的cpu的內(nèi)核調(diào)用棧獲取方法及裝置,通過在用戶態(tài)中通過輸入?yún)?shù)生成內(nèi)核調(diào)用棧獲取命令;根據(jù)所述內(nèi)核調(diào)用棧獲取命令確定目標(biāo)cpu;執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以向所述目標(biāo)cpu發(fā)送ipi核間中斷請求;基于所述ipi核間中斷請求所述目標(biāo)cpu通過預(yù)設(shè)接口獲取內(nèi)核調(diào)用棧的數(shù)據(jù);將所述數(shù)據(jù)儲存在預(yù)設(shè)字符數(shù)組中;再次執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以由所述預(yù)設(shè)字符數(shù)組獲取內(nèi)核調(diào)用棧的數(shù)據(jù)的方式,能夠在不造成長時間業(yè)務(wù)中斷的情況下,通過用戶態(tài)的可維護(hù)命令來獲取arm64架構(gòu)下內(nèi)核態(tài)cpu的當(dāng)前調(diào)用棧信息,提升系統(tǒng)調(diào)試、性能分析以及故障排查效率。
16、應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性的,并不能限制本申請。
本文檔來自技高網(wǎng)...【技術(shù)保護(hù)點(diǎn)】
1.一種基于用戶態(tài)命令的CPU的內(nèi)核調(diào)用棧獲取方法,其特征在于,包括:
2.如權(quán)利要求1所述的方法,其特征在于,在用戶態(tài)中通過輸入?yún)?shù)生成內(nèi)核調(diào)用棧獲取命令,包括:
3.如權(quán)利要求1所述的方法,其特征在于,根據(jù)所述內(nèi)核調(diào)用棧獲取命令確定目標(biāo)CPU,包括:
4.如權(quán)利要求1所述的方法,其特征在于,執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以向所述目標(biāo)CPU發(fā)送IPI核間中斷請求,包括:
5.如權(quán)利要求4所述的方法,其特征在于,執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以向所述目標(biāo)CPU發(fā)送IPI核間中斷請求,還包括:
6.如權(quán)利要求1所述的方法,其特征在于,基于所述IPI核間中斷請求所述目標(biāo)CPU通過預(yù)設(shè)接口獲取內(nèi)核調(diào)用棧的數(shù)據(jù),包括:
7.如權(quán)利要求6所述的方法,其特征在于,通過所述寄存器的值獲取內(nèi)核調(diào)用棧的數(shù)據(jù),包括:
8.如權(quán)利要求1所述的方法,其特征在于,將所述數(shù)據(jù)儲存在預(yù)設(shè)字符數(shù)組中,還包括:
9.如權(quán)利要求1所述的方法,其特征在于,再次執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以由所述預(yù)設(shè)字符數(shù)組獲取內(nèi)核調(diào)用棧的數(shù)據(jù),包括
10.一種基于用戶態(tài)命令的CPU的內(nèi)核調(diào)用棧獲取裝置,其特征在于,包括:
...【技術(shù)特征摘要】
1.一種基于用戶態(tài)命令的cpu的內(nèi)核調(diào)用棧獲取方法,其特征在于,包括:
2.如權(quán)利要求1所述的方法,其特征在于,在用戶態(tài)中通過輸入?yún)?shù)生成內(nèi)核調(diào)用棧獲取命令,包括:
3.如權(quán)利要求1所述的方法,其特征在于,根據(jù)所述內(nèi)核調(diào)用棧獲取命令確定目標(biāo)cpu,包括:
4.如權(quán)利要求1所述的方法,其特征在于,執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以向所述目標(biāo)cpu發(fā)送ipi核間中斷請求,包括:
5.如權(quán)利要求4所述的方法,其特征在于,執(zhí)行所述內(nèi)核調(diào)用棧獲取命令以向所述目標(biāo)cpu發(fā)送ipi核間中斷請求,還包括:
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:燕飛祥,
申請(專利權(quán))人:杭州迪普科技股份有限公司,
類型:發(fā)明
國別省市:
還沒有人留言評論。發(fā)表了對其他瀏覽者有用的留言會獲得科技券。