[發明專利]用于確定調用棧棧幀的對象的方法、裝置、設備和介質在審
| 申請號: | 202110302483.0 | 申請日: | 2021-03-22 |
| 公開(公告)號: | CN112925717A | 公開(公告)日: | 2021-06-08 |
| 發明(設計)人: | 劉洪凱 | 申請(專利權)人: | 北京字節跳動網絡技術有限公司 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 北京開陽星知識產權代理有限公司 11710 | 代理人: | 祝樂芳 |
| 地址: | 100041 北京市石景山區*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 用于 確定 調用 棧棧幀 對象 方法 裝置 設備 介質 | ||
本公開實施例涉及一種用于確定調用棧棧幀的對象的方法、裝置、設備和介質,其中,該方法包括:申請第一內存區域,并確定其目標子區域;對目標子區域中存儲的內容進行初始化;將初始化后的目標子區域中的存儲內容更改為自定義虛擬功能模塊表的地址;該表中的第三個功能模塊地址為預設目標回調功能模塊的地址;基于第一內存區域的首地址,執行棧回溯功能模塊WalkStack對應的代碼段,以啟動調用棧的回溯;如果回溯出調用棧中的一個棧幀,則執行預設目標回調功能模塊對應的代碼段,并在執行過程中執行棧幀對象獲取功能模塊GetThisObject對應的代碼段,以確定棧幀的當前對象。本公開實施例可以實現獲取程序運行過程中棧幀的對象,為分析程序運行中的異常提供信息依據。
技術領域
本公開涉及計算機技術領域,尤其涉及一種用于確定調用棧棧幀的對象的方法、裝置、設備和介質。
背景技術
Java是一門面向對象編程語言,它的每個方法(類似于C語言中的函數)都存在一個主體(或稱為對象)。獲取每個方法對應的主體,可以為排查與定位程序運行過程中的異常提供有效的信息。
程序的執行過程可看作連續的函數調用,函數調用過程通常使用堆棧實現,可以使用堆棧傳遞與存儲函數調用過程中相關的參數、局部變量等信息。在現有的獲取調用棧的方案中,通過調用系統的getStatckTrace函數獲取調用棧中各個棧幀的信息(每個棧幀中維持著每個函數的調用所需要的各種信息)。然而,調用getStatckTrace函數通常只能得到各個棧幀的方法名,無法獲取棧幀的對象(即方法對應的主體)。
因此,如何確定調用棧中棧幀的對象,仍是當前待解決的問題。
發明內容
為了解決上述技術問題或者至少部分地解決上述技術問題,本公開實施例提供了一種用于確定調用棧棧幀的對象的方法、裝置、設備和介質。
第一方面,本公開實施例提供了一種用于確定調用棧棧幀的對象的方法,包括:
申請第一內存區域,并確定所述第一內存區域中的目標子區域;其中,所述目標子區域是所述第一內存區域的首地址對應的區域;
獲取上下文參數和當前線程指針;
基于所述第一內存區域的首地址、所述上下文參數和當前線程指針,執行構造功能模塊對應的代碼段,對所述目標子區域中存儲的內容進行初始化;
將初始化后的目標子區域中的存儲內容更改為自定義虛擬功能模塊表的地址;其中,所述自定義虛擬功能模塊表中的第三個功能模塊地址為預設目標回調功能模塊的地址;
基于所述第一內存區域的首地址,執行棧回溯功能模塊WalkStack對應的代碼段,以啟動調用棧的回溯;
如果回溯出所述調用棧中的一個棧幀,則執行所述預設目標回調功能模塊對應的代碼段;
在執行所述預設目標回調功能模塊對應的代碼段的過程中,基于所述第一內存區域的首地址,執行棧幀對象獲取功能模塊GetThisObject對應的代碼段;
基于執行所述棧幀對象獲取功能模塊GetThisObject對應的代碼段得到的結果,確定所述棧幀的當前對象。
第二方面,本公開實施例還提供了一種用于確定調用棧棧幀的對象的裝置,包括:
第一內存區域申請模塊,用于申請第一內存區域,并確定所述第一內存區域中的目標子區域;其中,所述目標子區域是所述第一內存區域的首地址對應的區域;
參數獲取模塊,用于獲取上下文參數和當前線程指針;
內容初始化模塊,用于基于所述第一內存區域的首地址、所述上下文參數和當前線程指針,執行構造功能模塊對應的代碼段,對所述目標子區域中存儲的內容進行初始化;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京字節跳動網絡技術有限公司,未經北京字節跳動網絡技術有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110302483.0/2.html,轉載請聲明來源鉆瓜專利網。





