The invention discloses a method and a device for obtaining function call information and a testing device. Among them, the method comprises the following steps: in the process of running test program, the managed function to be invoked in the program compile, get unmanaged functions for the hook hook operation on the unmanaged function, the first function call information, according to the function of the first function call information and the name of the managed function to generate second function calls. Second function call information, output the unmanaged function is allowed to run directly on the CPU, hook operating parameters for monitoring unmanaged functions at runtime and the return value, the first function call information includes at least a function entry time, exit time, function return value, function name, function managed function function second call information including relationship with the entry time, exit time, function return value. The invention solves the technical problem of the crash of the related technology.
【技術實現步驟摘要】
本專利技術涉及通信領域,具體而言,涉及一種函數調用信息的獲取方法及裝置、測試設備。
技術介紹
相關技術中提供了一種可以記錄托管代碼函數的調用情況的技術方案,利用Mono提供的Profiler(可以理解為是一種分析工具)功能,該功能可以利用Mono提供的mono_profiler_install_enter_leave接口注冊兩個函數,這兩個注冊過的回調函數分別會在托管代碼里的函數進入和退出的時候被調用,Mono會給這兩個回調函數提供一個自定義的數據結構,用來存儲可能需要的數據,還會提供一個參數,通過該參數可以獲取本次托管代碼調用了哪個函數。接口注冊好了以后再用Mono提供的mono_profiler_set_events接口設置MONO_PROFILER_ENTER_LEAVE事件,至此,托管代碼中運行的所有函數只要一被執行就會調用注冊過的兩個回調函數。在實際項目中,專利技術人發現使用上述技術方案去記錄托管代碼函數的調用情況,會發生偶現的crash崩潰現象,直接導致了現有的技術方案不能應用在一些復雜項目中。針對上述的問題,目前尚未提出有效的解決方案。
技術實現思路
本專利技術實施例提供了一種函數調用信息的獲取方法及裝置、測試設備,以至少解決相關技術中采用mono提供的分析工具獲取托管函數的調用情況的技術方案,偶現crash現象的技術問題。根據本專利技術實施例的一個方面,提供了一種函數調用信息的獲取方法,包括:在運行待測試的程序的過程中,對所述程序中待調用的托管函數進行編譯,得到非托管函數,其中,所述非托管函數被允許直接運行在中央處理器CPU上;對所述非托管函 ...
【技術保護點】
一種函數調用信息的獲取方法,其特征在于,包括:在運行待測試的程序的過程中,對所述程序中待調用的托管函數進行編譯,得到非托管函數,其中,所述非托管函數被允許直接運行在中央處理器CPU上;對所述非托管函數進行鉤子hook操作,得到第一函數調用信息,其中,所述hook操作用于監控所述非托管函數在運行時的參數和返回值,所述第一函數調用信息至少包括:函數進入時間、函數退出時間,函數返回值;根據所述第一函數調用信息和所述托管函數的函數名生成第二函數調用信息,其中,所述第二函數調用信息中包括具有對應關系的所述托管函數的函數名、函數進入時間、函數退出時間,函數返回值;輸出所述第二函數調用信息。
【技術特征摘要】
1.一種函數調用信息的獲取方法,其特征在于,包括:在運行待測試的程序的過程中,對所述程序中待調用的托管函數進行編譯,得到非托管函數,其中,所述非托管函數被允許直接運行在中央處理器CPU上;對所述非托管函數進行鉤子hook操作,得到第一函數調用信息,其中,所述hook操作用于監控所述非托管函數在運行時的參數和返回值,所述第一函數調用信息至少包括:函數進入時間、函數退出時間,函數返回值;根據所述第一函數調用信息和所述托管函數的函數名生成第二函數調用信息,其中,所述第二函數調用信息中包括具有對應關系的所述托管函數的函數名、函數進入時間、函數退出時間,函數返回值;輸出所述第二函數調用信息。2.根據權利要求1所述的方法,其特征在于,在對所述非托管函數進行鉤子hook操作之后,且在根據所述第一函數調用信息和所述托管函數的函數名生成第二函數調用信息之前,還包括:根據預先建立的對應關系獲取與所述非托管函數的第一函數指針對應的所述托管函數的第二函數指針;通過所述第二函數指針查找到所述托管函數的所述函數名。3.根據權利要求2所述的方法,其特征在于,在對所述非托管函數進行鉤子hook操作之后,且在根據預先建立的對應關系獲取與所述非托管函數的第一函數指針對應的所述托管函數的第二函數指針之前,還包括:通過執行所述hook操作得到的返回地址獲取所述非托管函數的匯編代碼;根據所述匯編代碼獲取所述非托管函數的第一函數指針。4.根據權利要求2所述的方法,其特征在于,在對所述程序中待調用的托管函數進行編譯之后,且在根據預先建立的對應關系獲取與所述非托管函數的第一函數指針對應的所述托管函數的第二函數指針之前,還包括:建立所述非托管函數的第一函數指針與所述托管函數的第二函數指針之間的所述對應關系,其中,進行所述編譯所需的參數包括所述托管函數的第二函數指針,進行所述編譯之后所得到的返回值包括所述非托管函數的第一函數指針。5.根據權利要求1至4中任一項所述的方法,其特征在于,對所述非托管函數進行鉤子hook操作,得到第一函數調用信息包括:使用預先定義的hook函數對非托管函數進行所述hook操作,其中,所述預先定義的hook函數輸入參數包括:需要被hook操作的參數,所述預先定義的hook函數輸出參數包括:所述托管函數運行時的參數和返回值,所述預先定義的hook函數,用于監控所述非托管函數在運行時的參數和返回值。6.根據權利要求1至4中任一項所述的方法,其特征在于,對所述程序中待調用的托管函數進行編譯,得到非托管函數包括:對所述程序中所有待調用的托管函數進行編譯,得到對應的非托管函數。7.一種函數調用信息的獲取裝置,其特征在于,包括:編譯單元,用于在運行待測試的程序的過程中,對所述程序中待調用的托管函數進行編譯;第一確定單元,用于對所述托管函數編譯后得到非托管函數,其中...
【專利技術屬性】
技術研發人員:黃柳優,李源純,姜潤知,王鵬,魏學峰,
申請(專利權)人:騰訊科技深圳有限公司,
類型:發明
國別省市:廣東;44
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。