程序調試方法、裝置及系統的制作方法
【技術領域】
[0001]本發明涉及一種程序調試技術,特別涉及一種防止程序停止在庫函數中的程序調試方法、裝置及系統。
【背景技術】
[0002]C語言調試開發環境包括界面處理裝置和硬件調試器部分,其中界面處理裝置包括了代碼編寫、分析、編譯和調試等功能,界面處理裝置與硬件調試器通過串口或USB等端口相連實現相互通信,硬件調試器連接用戶實際應用系統,用于對目標芯片進行實時調試及監控,實現基本的調試命令。
[0003]調試時,硬件調試器提供了運行、單步、停止、斷點等功能實現對目標芯片的運行控制,目標芯片中運行的是C編譯器產生的二進制機器碼,其中二進制機器碼包括了用戶自己編寫的源程序對應的二進制機器碼和編譯器內部提供的庫函數程序對應的二進制機器碼,源程序通過調用庫函數實現相應的功能,C編譯器提供的庫函數一般集成在工具鏈中,不以用戶源代碼形式出現,當目標芯片執行完單步、步越命令或接收到停止運行命令時,目標芯片停止運行并返回當前的程序計數器(Program counter,簡稱:PC),界面處理裝置根據PC找到所對應的源程序行號信息并顯示當前程序運行的源碼位置。
[0004]然而,現有技術在執行完單步、步越命令或接收到停止運行命令之后,時常出現無法確定目標芯片運行的二進制機器碼與源程序之間的對應關系,不便于用戶調試。
【發明內容】
[0005]本發明提供一種程序調試方法、裝置及系統,解決了調試過程中程序停止在庫函數對應的機器碼中的問題,進而能夠確定目標芯片運行的二進制機器碼與源程序之間的對應關系。
[0006]第一個方面,本發明實施例提供一種程序調試方法,包括:
[0007]向目標芯片發送程序調試指令,以使所述目標芯片根據所述程序調試指令運行二進制代碼程序;
[0008]在程序運行停止時,讀取所述目標芯片當前運行的二進制代碼程序的PC ;
[0009]判斷所述PC是否在第一映射表內,所述第一映射表包括庫函數與所述庫函數在所述二進制代碼程序中的PC之間的映射關系;
[0010]如果所述PC在所述第一映射表內,則重新向所述目標芯片發送程序調試指令,直到所述目標芯片在程序運行停止時的二進制代碼程序的PC不在所述第一映射表內為止。
[0011]進一步的,所述向目標芯片發送程序調試指令之前,還包括:
[0012]接收界面處理裝置發送的所述第一映射表,所述第一映射表為所述界面處理裝置根據編譯過程中生成的調試信息生成的,所述調試信息包括源代碼行號與源代碼對應的二進制代碼的PC之間的對應關系,以及程序指令與當前運行的二進制代碼的PC之間的對應關系,其中所述程序指令與二進制代碼一一對應。
[0013]進一步的,還包括:
[0014]如果所述PC不在所述第一映射表內,則向界面處理裝置發送所述PC,以使所述界面處理裝置根據第二映射表,確定所述PC對應的源代碼行號,所述第二映射表包括源代碼行號與源代碼對應的二進制代碼的PC之間的映射關系。
[0015]可選的,在上述所有實施例提供的一種程序調試方法中,所述調試指令包括了單步指令、步越指令或停止運行指令。
[0016]第二個方面,本發明實施例提供一種程序調試方法,包括:
[0017]對源代碼進行編譯,生成二進制代碼和調試信息,所述調試信息包括源代碼行號與源代碼對應的二進制代碼的PC之間的對應關系,以及程序指令與當前運行的二進制代碼的PC之間的對應關系,其中程序指令與二進制代碼一一對應;
[0018]根據程序指令與當前運行的二進制代碼的PC之間的對應關系,確定所述源代碼中調用的庫函數對應的二進制代碼的起始PC和結束PC ;
[0019]根據各個庫函數對應的二進制代碼的起始PC和結束PC,生成第一映射表,所述第一映射表包括庫函數與所述庫函數在所述二進制代碼程序中的PC之間的映射關系;
[0020]根據源代碼行號與源代碼對應的二進制代碼的PC之間的對應關系,生成第二映射表,所述第二映射表包括源代碼行號與源代碼對應的二進制代碼的PC之間的映射關系。
[0021]進一步的,所述生成第一映射表之后,還包括:
[0022]向程序調試器發送所述第一映射表。
[0023]進一步的,所述向程序調試器發送所述第一映射表之后,還包括:
[0024]接收所述程序調試器發送的PC ;
[0025]根據所述第二映射表,確定所述PC對應的源代碼行號。
[0026]第三個方面,本發明實施例提供一種程序調試器,包括:
[0027]第一發送模塊,用于向目標芯片發送程序調試指令,以使所述目標芯片根據所述程序調試指令運行二進制代碼程序;
[0028]讀取模塊,用于在程序運行停止時,讀取所述目標芯片當前運行的二進制代碼程序的PC ;
[0029]判斷模塊,用于判斷所述PC是否在第一映射表內,所述第一映射表包括庫函數與所述庫函數在所述二進制代碼程序中的PC之間的映射關系;
[0030]第一發送模塊,還用于如果所述PC在所述第一映射表內,則重新向所述目標芯片發送程序調試指令,直到所述目標芯片在程序運行停止時的二進制代碼程序的PC不在所述第一映射表內為止。
[0031]進一步的,所述第一發送模塊還包括:
[0032]第一接收單元,用于第一發送模塊向目標芯片發送程序調試指令之前,接收界面處理裝置發送的所述第一映射表,所述第一映射表為所述界面處理裝置根據編譯過程中生成的調試信息生成的,所述調試信息包括源代碼行號與源代碼對應的二進制代碼的PC之間的對應關系,以及程序指令與當前運行的二進制代碼的PC之間的對應關系,其中所述程序指令與二進制代碼一一對應。
[0033]進一步的,還包括:
[0034]第二發送模塊,用于如果所述PC不在所述第一映射表內,則向界面處理裝置發送所述PC,以使所述界面處理裝置根據第二映射表,確定所述PC對應的源代碼行號,所述第二映射表包括所述源代碼行號與源代碼對應的二進制代碼的PC之間的映射關系。
[0035]第四個方面,本發明實施例提供一種界面處理裝置,包括:
[0036]編譯模塊,用于對源代碼進行編譯,生成二進制代碼和調試信息,所述調試信息包括源代碼行號與源代碼對應的二進制代碼的PC之間的對應關系,以及程序指令與當前運行的二進制代碼的PC之間的對應關系,其中所述程序指令與二進制代碼一一對應;
[0037]確定模塊,用于根據所述程序指令與當前運行的二進制代碼的PC之間的對應關系,確定所述源代碼中調用的庫函數對應的二進制代碼的起始PC和結束PC ;
[0038]第一生成模塊,用于根據各個庫函數對應的二進制代碼的起始PC和結束PC,生成第一映射表,所述第一映射表包括庫函數與所述庫函數在所述二進制代碼程序中的PC之間的映射關系;
[0039]第二生成模塊,用于根據源代碼行號與源代碼對應的二進制代碼的PC之間的對應關系,生成第二映射表,所述第二映射表包括源代碼行號與源代碼對應的二進制代碼的PC之間的映射關系。
[0040]進一步的,還包括
[0041]第三發送模塊,用于在第一生成模塊生成第一映射表之后,向程序調試器發送所述第一映射表。
[0042]進一步的,所述第三發送模塊還包括:
[0043]第二接收單元,用于第三模塊向程序調試器發送所述第一映射表之后,接收所述程序調試器發送的PC ;
[0044]確定單元,用于根據所述第二映射表,確定所述PC對應的源代碼行號。
[0045]第五個方面,本發明實施例提供一種程序調試系統,包括:
[0046]如上第三個方面任一所述的程序調試器和第四個方面的任一所述的界面處理裝置。
[0047]本發明實施例提供的程序調試方法、裝置及系統,通過向目標芯片發送程序調試指令,在程序停止時,讀取目標芯片當前運行的二進制代碼程