一種軟件在線調試方法和系統(tǒng)的制作方法
【技術領域】
[0001]本發(fā)明涉及程序調試領域,尤其涉及一種軟件在線調試方法和系統(tǒng)。
【背景技術】
[0002]目前,在軟件開發(fā)以及軟件開發(fā)后的使用過程中,不可避免地會出現(xiàn)各種軟件問題?,F(xiàn)有的用于定位軟件問題的方法包括:運行日志、調試命令、單步追蹤。
[0003]上述方法中,運行日志和調試命令需要將產生日志和調試信息的調試指令通過硬編碼的方式預先寫入軟件程序的相應位置。通過硬編碼寫入的調試指令不易更改和刪除,也因為通過硬編碼寫入的調試不易刪除,占用了內存,使得在任意軟件位置對軟件錯誤進行定位變得不可行。此外,當技術人員通過硬編碼的方式將調試指令寫入軟件程序的相應位置后,還需要對寫入調試指令的軟件程序重新進行調度、編譯、連接和運行,在軟件程序重新運行后,原先軟件錯誤的運行環(huán)境可能發(fā)生丟失/改變,使軟件錯誤不易復現(xiàn)。
[0004]上述方法中,單步追蹤為每執(zhí)行完一條語句以后,就會停下來,顯示運行情況,這種方法要求技術人員一直在現(xiàn)場以便對每條語句的運行結果進行分析,及時發(fā)現(xiàn)錯誤,并且這種方法更適合單任務的軟件程序的調試。而在網絡設備的實時軟件程序中往往同時有幾十個任務在運行、并且任務之間相互關聯(lián),單步追蹤已不適應。
【發(fā)明內容】
[0005]本發(fā)明提供了一種軟件在線調試方法和系統(tǒng),以解決如何實現(xiàn)在調試過程中任意更改調試指令的問題。
[0006]為解決上述技術問題,本發(fā)明提供了一種軟件在線調試方法,所述方法包括:
[0007]確定軟件中的被追蹤點;
[0008]當執(zhí)行到所述被追蹤點時,保存所述被追蹤點處的軟件當前運行環(huán)境;
[0009]調用已存儲的在線調試指令,執(zhí)行調試任務,輸出在線調試信息;
[0010]恢復所述軟件當前運行環(huán)境,從所述被追蹤點處繼續(xù)執(zhí)行所述軟件后續(xù)程序。
[0011]可選地,所述確定軟件中的被追蹤點具體包括:
[0012]通過命令行接收用戶輸入的設置指令,所述設置指令包括所述軟件中被追蹤點的地址;
[0013]將所述被追蹤點地址處的二進制機器指令反匯編為匯編程序;
[0014]根據(jù)所述匯編程序確定所述被追蹤點的位置。
[0015]可選地,所述當執(zhí)行到所述被追蹤點時,保存所述被追蹤點處的軟件當前運行環(huán)境具體包括:
[0016]當執(zhí)行到所述被追蹤點時,根據(jù)在被追蹤點生成的跳轉指令,跳轉至已存儲在所述軟件中的保護/恢復環(huán)境指令;
[0017]執(zhí)行所述保護/恢復環(huán)境指令中的保護環(huán)境指令,保存所述被追蹤點處的軟件當前運行環(huán)境。
[0018]可選地,所述調用已存儲的在線調試指令,執(zhí)行調試任務,輸出在線調試信息具體包括:
[0019]執(zhí)行所述保護/恢復環(huán)境指令;
[0020]當執(zhí)行到所述保護/恢復環(huán)境指令中的跳轉點時,通過所述跳轉點,跳轉至所述在線調試指令;
[0021]執(zhí)行所述在線調試指令,輸出在線調試信息。
[0022]可選地,所述恢復所述軟件當前運行環(huán)境,從所述被追蹤點處繼續(xù)執(zhí)行所述軟件后續(xù)程序具體包括:
[0023]當輸出在線調試信息后,從所述在線調試指令跳轉回所述跳轉點;
[0024]執(zhí)行所述保護/恢復環(huán)境指令中的恢復環(huán)境指令,并跳轉回所述被追蹤點,從所述被追蹤點處繼續(xù)執(zhí)行所述軟件后續(xù)程序。
[0025]可選地,所述方法還包括:
[0026]在執(zhí)行調試任務的過程中,通過命令行,接收用戶輸入的被追蹤點狀態(tài)查看指令;
[0027]根據(jù)所述查看指令,向所述用戶反饋所述軟件中被追蹤點的狀態(tài)信息,所述被追蹤點的狀態(tài)信息包括以下一種或多種:
[0028]被追蹤點的執(zhí)行時間、當前CPU各寄存器的狀態(tài)、當前任務堆棧信息。
[0029]可選地,所述確定軟件中的被追蹤點之后還包括:
[0030]通過命令行,接收用戶輸入的被追蹤點刪除指令,所述被追蹤點刪除指令包括待刪除的所述被追蹤點的位置;
[0031]將待刪除的所述被追蹤點的位置還原為設置所述被追蹤點之前的二進制機器指令;
[0032]當執(zhí)行到原所述被追蹤點的位置時,執(zhí)行所述二進制機器指令。
[0033]為解決上述技術問題,本發(fā)明還提供了一種軟件在線調試系統(tǒng),所述系統(tǒng)包括:
[0034]被追蹤點確定模塊,用于確定軟件中的被追蹤點;
[0035]程序執(zhí)行模塊,用于在執(zhí)行到所述被追蹤點時,保存所述被追蹤點處的軟件當前運行環(huán)境;以及在調試結束后,恢復所述軟件當前運行環(huán)境,從所述被追蹤點處繼續(xù)執(zhí)行所述軟件后續(xù)程序;
[0036]調試模塊,用于在保存軟件當前運行環(huán)境后,調用已存儲的在線調試指令,執(zhí)行調試任務,輸出在線調試信息。
[0037]可選地,所述被追蹤點確定模塊,用于確定軟件中的被追蹤點,具體包括:
[0038]通過命令行接收用戶輸入的設置指令,所述設置指令包括所述軟件中被追蹤點的地址;
[0039]將所述被追蹤點地址的二進制機器指令反匯編為匯編程序;
[0040]根據(jù)所述匯編程序確定所述被追蹤點的位置。
[0041]可選地,所述程序執(zhí)行模塊,用于在執(zhí)行到所述被追蹤點時,保存所述被追蹤點處的軟件當前運行環(huán)境,具體包括:
[0042]當執(zhí)行到所述被追蹤點時,根據(jù)在被追蹤點生成的跳轉指令,跳轉至已存儲在所述軟件中的保護/恢復環(huán)境指令;
[0043]執(zhí)行所述保護/恢復環(huán)境指令中的保護環(huán)境指令,保存所述被追蹤點處的軟件當前運行環(huán)境。
[0044]可選地,所述調試模塊,用于調用已存儲的在線調試指令,執(zhí)行調試任務,輸出在線調試信息,具體包括:
[0045]執(zhí)行所述保護/恢復環(huán)境指令;
[0046]當執(zhí)行到所述保護/恢復環(huán)境指令中的跳轉點時,通過所述跳轉點,跳轉至所述在線調試指令;
[0047]執(zhí)行所述在線調試指令,輸出在線調試信息。
[0048]可選地,所述程序執(zhí)行模塊,用于恢復所述軟件當前運行環(huán)境,從所述被追蹤點處繼續(xù)執(zhí)行所述軟件后續(xù)程序,具體包括:
[0049]當輸出在線調試信息后,從所述在線調試指令跳轉回所述跳轉點;
[0050]執(zhí)行所述保護/恢復環(huán)境指令中的恢復環(huán)境指令,并跳轉回所述被追蹤點,從所述被追蹤點處繼續(xù)執(zhí)行所述軟件后續(xù)程序。
[0051 ] 可選地,所述系統(tǒng)還包括:
[0052]狀態(tài)查看模塊,用于在調試任務執(zhí)行過程中,通過命令行,接收用戶輸入的被追蹤點狀態(tài)查看指令;
[0053]根據(jù)所述查看指令,向所述用戶反饋所述軟件中被追蹤點的狀態(tài)信息,所述被追蹤點的狀態(tài)信息包括以下一種或多種:
[0054]被追蹤點的執(zhí)行時間、當前CPU各寄存器的狀態(tài)、當前任務堆棧信息。
[0055]可選地,所述系統(tǒng)還包括:
[0056]被追蹤點刪除模塊,用于通過命令行,接收用戶輸入的被追蹤點刪除指令,所述被追蹤點刪除指令包括待刪除的所述被追蹤點的位置;
[0057]將待刪除的所述被追蹤點的位置還原為設置所述被追蹤點之前的二進制機器指令;
[0058]當執(zhí)行到原所述被追蹤點的位置時,執(zhí)行所述二進制機器指令。
[0059]通過應用本發(fā)明提供的一種軟件在線調試方法和系統(tǒng),在軟件程序運行時,動態(tài)設置被追蹤點,通過設置的被追蹤點,保存被追蹤點處的軟件當前運行環(huán)境;調用已