国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種Java卡調(diào)試信息的處理方法

      文檔序號(hào):6373760閱讀:243來(lái)源:國(guó)知局
      專利名稱:一種Java卡調(diào)試信息的處理方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及調(diào)試信息處理領(lǐng)域,尤其涉及一種Java卡調(diào)試信息的處理方法。
      背景技術(shù)
      Java卡是一種可以運(yùn)行Java程序的智能卡,是Java技術(shù)和智能卡技術(shù)的結(jié)合。運(yùn)行在Java卡上的Java卡程序稱為Java卡Applet,它是源代碼級(jí)調(diào)試平臺(tái)的調(diào)試對(duì)象。經(jīng)過(guò)近年來(lái)快速的發(fā)展,Java卡已經(jīng)廣泛地應(yīng)用在各種領(lǐng)域,尤其是通信和金融領(lǐng)域。在現(xiàn)有技術(shù)中,通常采用生成日志的方法來(lái)對(duì)Java卡程序進(jìn)行調(diào)試。在啟動(dòng)虛擬機(jī)時(shí)傳遞一個(gè)參數(shù),作為虛擬機(jī)開啟日志記錄的標(biāo)記,在虛擬機(jī)運(yùn)行的時(shí)候?qū)ava卡程序中的特定調(diào)試符號(hào)如函數(shù)、調(diào)用棧等信息打印在日志中,采用實(shí)時(shí)打印或者寫文件等形式 查看日志。但是這種方法效率低、操作不方便,對(duì)于資源信息(如變量值等)無(wú)法進(jìn)行實(shí)時(shí)監(jiān)視,不具有針對(duì)性,特別是對(duì)于一般的應(yīng)用開發(fā)者來(lái)說(shuō),查看這樣的調(diào)試日志比較困難。

      發(fā)明內(nèi)容
      鑒于現(xiàn)有技術(shù)的不足,本發(fā)明提供了一種Java卡調(diào)試信息的處理方法,其具有方便于上層應(yīng)用開發(fā)者使用、可實(shí)時(shí)監(jiān)控和查看的特點(diǎn)。本發(fā)明提供的一種Java卡調(diào)試信息的處理方法,包括步驟A :獲取指令并檢測(cè)指令類型,如是設(shè)置指令,則執(zhí)行步驟B,如是調(diào)試指令,則執(zhí)行步驟E,如是其他,則根據(jù)指令進(jìn)行操作;步驟B :按照預(yù)設(shè)規(guī)定對(duì)所述設(shè)置指令進(jìn)行解析得到包頭和數(shù)據(jù)部分,對(duì)所述包頭進(jìn)行解析,從所述設(shè)置指令包頭的解析結(jié)果中獲取請(qǐng)求ID和請(qǐng)求標(biāo)記,判斷所述請(qǐng)求標(biāo)記是否為預(yù)設(shè)值,是則執(zhí)行步驟C,否則給發(fā)送裝置返回提示信息;步驟C :從所述設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令,如所述命令集為事件請(qǐng)求命令集且所述命令對(duì)應(yīng)的事件類型為設(shè)置事件,從所述解析結(jié)果中獲取調(diào)節(jié)器,如是位置調(diào)節(jié)器則根據(jù)位置信息在虛擬機(jī)上運(yùn)行的Java卡程序中查找原字節(jié)碼,并用特殊字節(jié)碼替換所述原字節(jié)碼,將所述原字節(jié)碼寫到事件列表中生成事件序列號(hào),順序執(zhí)行步驟D ;如是單步調(diào)節(jié)器,則設(shè)置單步調(diào)試信息,將事件寫到事件列表中生成事件序列號(hào),順序執(zhí)行步驟D ;如所述命令對(duì)應(yīng)的事件類型為其他事件則根據(jù)設(shè)置指令進(jìn)行操作;如所述命令集為其他命令集則根據(jù)設(shè)置指令進(jìn)行操作;步驟D :根據(jù)預(yù)設(shè)規(guī)則設(shè)置第一返回?cái)?shù)據(jù),并將所述第一返回?cái)?shù)據(jù)返回給發(fā)送裝置;步驟E :獲取虛擬機(jī)上當(dāng)前運(yùn)行的Java卡程序的字節(jié)碼,判斷所述讀取的字節(jié)碼是否為特殊字節(jié)碼,是則執(zhí)行步驟F,否則執(zhí)行步驟G ;步驟F :根據(jù)所述獲取的字節(jié)碼從事件列表中查找對(duì)應(yīng)的原字節(jié)碼并用所述原字節(jié)碼替換所述獲取的字節(jié)碼,從所述虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I;
      步驟G :判斷事件列表中的單步調(diào)試標(biāo)志是否置位,是則步驟H,否則返回步驟E ;步驟H:根據(jù)所述獲取的字節(jié)碼從所述虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I ;步驟I :根據(jù)所述預(yù)設(shè)規(guī)則設(shè)置第二返回?cái)?shù)據(jù),并將所述第二返回?cái)?shù)據(jù)返回給發(fā)
      送裝置。其中,所述步驟C和步驟E-步驟H分別替換為步驟C’和步驟E’ -步驟H’ ;步驟C’ 從所述設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令,如所述命令集為事件請(qǐng)求命令集且所述命令對(duì)應(yīng)的事件類型為設(shè)置事件,從所述解析結(jié)果中獲取調(diào)節(jié)器,如是位置調(diào)節(jié)器則根據(jù)位置信息在虛擬機(jī)上運(yùn)行的Java卡程序中查找原字節(jié)碼,并用特殊字節(jié)碼替換所述原字節(jié)碼,將所述原字節(jié)碼寫到事件列表中生成事件序列號(hào),順序執(zhí)行步驟D ;如是單步調(diào)節(jié)器,則根據(jù)指令中的位置信息在虛擬機(jī)上運(yùn)行的Java卡程序中查找 原字節(jié)碼,并用特殊字節(jié)碼替換所述原字節(jié)碼,并從指令中獲取單步調(diào)試信息,將單步事件寫到事件列表中生成事件序列號(hào),順序執(zhí)行步驟D ;如所述命令對(duì)應(yīng)的事件類型為其他事件則根據(jù)設(shè)置指令進(jìn)行操作;如所述命令集為其他命令集則根據(jù)設(shè)置指令進(jìn)行操作;步驟E’ 對(duì)調(diào)試指令進(jìn)行解析并從解析結(jié)果中獲取字節(jié)碼,判斷所述獲取的字節(jié)碼是否為特殊字節(jié)碼,是則執(zhí)行步驟F’,否則結(jié)束本次操作,等待虛擬機(jī)下發(fā)指令;步驟F’ 判斷事件列表中的單步調(diào)試標(biāo)志是否置位,是則步驟G’,否則返回步驟H,;步驟G’ 根據(jù)所述獲取的字節(jié)碼從所述虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I ;步驟H’ 根據(jù)特殊字節(jié)碼從事件列表中查找對(duì)應(yīng)的原字節(jié)碼并用所述原字節(jié)碼替換所述特殊字節(jié)碼,從所述虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I。其中,所述步驟C替換為步驟C” ;步驟C” 從所述設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令,如所述命令集為事件請(qǐng)求命令集且所述命令對(duì)應(yīng)的事件類型為設(shè)置事件,從所述解析結(jié)果中獲取調(diào)節(jié)器,如是位置調(diào)節(jié)器則根據(jù)指令中的斷點(diǎn)位置信息從調(diào)試數(shù)據(jù)中讀取對(duì)應(yīng)的原字節(jié)碼并保存,用特殊字節(jié)碼代替所述原字節(jié)碼;將所述斷點(diǎn)位置信息事件種類一起添加到斷點(diǎn)列表中,在事件列表中添加出棧事件生成事件序列號(hào);如是單步調(diào)節(jié)器,則設(shè)置單步調(diào)試信息,將事件寫到事件列表中生成事件序列號(hào);如所述命令對(duì)應(yīng)的事件類型為其他事件則根據(jù)設(shè)置指令執(zhí)行操作;如所述命令集為其他命令集則根據(jù)設(shè)置指令執(zhí)行操作。其中,所述步驟A中通過(guò)指令格式檢測(cè)指令類型,具體包括如所述指令的格式符合第一預(yù)設(shè)格式則為設(shè)置指令,如所述指令的格式符合APDU格式則為調(diào)試指令。其中,所述步驟A中獲取指令包括從命令緩存中獲取指令或接收所述發(fā)送裝置發(fā)送的指令。其中,在判斷所述請(qǐng)求標(biāo)記是否為預(yù)設(shè)值之前包括從所述設(shè)置指令包頭的解析結(jié)果中獲取指令長(zhǎng)度,根據(jù)所述指令長(zhǎng)度判斷所述設(shè)置指令是否完整,如完整則判斷所述設(shè)置指令是否為未處理指令,是則繼續(xù),否則結(jié)束,如不完整則結(jié)束。其中,所述根據(jù)所述指令長(zhǎng)度判斷所述設(shè)置指令是否完整,具體為
      所述判斷所述設(shè)置指令所占字節(jié)是否與所述指令長(zhǎng)度相符,是則所述設(shè)置指令完整,否則所述設(shè)置指令不完整。其中,所述判斷所述請(qǐng)求標(biāo)記是否為預(yù)設(shè)值,包括判斷所述獲取的請(qǐng)求標(biāo)記是否為0x00,是則執(zhí)行步驟E,否則給發(fā)送裝置返回提示信息。其中,所述給發(fā)送裝置返回提示信息,具體包括從所述設(shè)置指令的請(qǐng)求標(biāo)記之后讀取兩字節(jié)的數(shù)據(jù),并將所述讀取的數(shù)據(jù)返回給發(fā)送裝置。其中,所述步驟C具體包括步驟Cl :從所述設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令,并檢測(cè)所述命令集的類型,如是事件請(qǐng)求命令集,則執(zhí)行步驟C2,否則根據(jù)其他命令集進(jìn)行操作;步驟C2 :判斷所述命令對(duì)應(yīng)的事件類型,如是清除單個(gè)斷點(diǎn)事件,則執(zhí)行步驟C3 ; 如是清除所有斷點(diǎn)事件,則執(zhí)行步驟C5 ;如是設(shè)置事件,則執(zhí)行步驟CS ;步驟C3 :對(duì)所述設(shè)置指令的數(shù)據(jù)部分進(jìn)行解析,從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取事件種類和事件請(qǐng)求ID,并根據(jù)所述事件種類和所述事件請(qǐng)求ID在事件列表中查找對(duì)應(yīng)的事件,判斷是否找到匹配的事件,是則執(zhí)行步驟C4,否則給發(fā)送裝置返回未找到匹配事件的信息;步驟C4 :結(jié)束當(dāng)前操作清空所述響應(yīng)緩存中的數(shù)據(jù);步驟C5 :在所述事件列表中查找所有斷點(diǎn)事件;步驟C6 :清空所述事件列表中的所有斷點(diǎn)事件,并判斷是否清空完成,是則執(zhí)行步驟C7,否則給發(fā)送裝置返回錯(cuò)誤信息;步驟C7 :清空所述響應(yīng)緩存中的數(shù)據(jù)并結(jié)束當(dāng)前操作;步驟CS :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取事件種類和暫停政策;步驟C9 :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取調(diào)節(jié)器個(gè)數(shù),根據(jù)所述調(diào)節(jié)器個(gè)數(shù)分配事件處理需要的緩存;步驟ClO :判斷所述調(diào)節(jié)器個(gè)數(shù)是否為0,是則給所述發(fā)送裝置返回錯(cuò)誤信息,否則執(zhí)行步驟Cll ;步驟Cll :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取調(diào)節(jié)器的種類,如是位置調(diào)節(jié)器,則進(jìn)行設(shè)置斷點(diǎn)操作;如是單步調(diào)節(jié)器,則進(jìn)行設(shè)置單步操作;如是其他調(diào)節(jié)器,則進(jìn)行其他調(diào)節(jié)器的操作;如不是調(diào)節(jié)器,則給發(fā)送裝置返回錯(cuò)誤信息。其中,所述步驟Cl中檢測(cè)所述命令集的類型具體包括判斷所述獲取的命令集的值是否為15,是則為事件請(qǐng)求命令集,否則為其他命令集。其中,所述步驟C2具體包括檢測(cè)所述獲取的命令所對(duì)應(yīng)的值,如是01則事件類型為設(shè)置事件,如是02則事件類型為清除事件,如是03則事件類型為清除所有斷點(diǎn)事件。其中,所述步驟Cll中判斷調(diào)節(jié)器的種類,具體包括檢測(cè)從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中的調(diào)解器個(gè)數(shù)之后獲取的值,如是8則為位置調(diào)節(jié)器,如是12則為單步調(diào)節(jié)器,如獲取的數(shù)據(jù)與預(yù)設(shè)值不符則不是調(diào)節(jié)器。其中,所述步驟Cll中的進(jìn)行設(shè)置斷點(diǎn)操作,包括步驟C12 :從所述設(shè)置指令數(shù)據(jù)部分的的解析結(jié)果中獲取斷點(diǎn)位置信息并進(jìn)行存儲(chǔ),所述斷點(diǎn)位置信息包括引用類型標(biāo)識(shí)、引用類型ID、函數(shù)ID和偏移信息;步驟C13:根據(jù)所述引用類型標(biāo)識(shí)、引用類型ID、函數(shù)ID和偏移信息在預(yù)先下載到所述虛擬機(jī)中的Java卡程序中查找對(duì)應(yīng)的位置,讀取所述對(duì)應(yīng)位置的原字節(jié)碼并保存,用特定字節(jié)碼替換所述對(duì)應(yīng)位置的原字節(jié)碼;步驟C14 :將斷點(diǎn)信息和所述事件種類一起添加到斷點(diǎn)列表中,所述斷點(diǎn)信息包括所述原字節(jié)碼和斷點(diǎn)位置信息;步驟C15 :將事件寫入到事件列表中生成事件序列號(hào),將所述事件序列號(hào)寫入到所述響應(yīng)緩存的第一預(yù)設(shè)位置。其中,所述步驟Cll中的進(jìn)行設(shè)置單步操作,包括步驟C16 :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取虛擬機(jī)線程ID、應(yīng)用程序的單步指令方式和單步調(diào)試方式;步驟C17 :判斷所述單步指令方式是否為第一指令方式或所述單步調(diào)試方式是否 為單步進(jìn)入,是則執(zhí)行步驟C21,否則執(zhí)行步驟C18 ;步驟C18 :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取當(dāng)前運(yùn)行的Java卡程序行對(duì)應(yīng)的棧信息;步驟C19 :判斷所述單步指令方式是否為第二指令方式,是則執(zhí)行步驟C20,否則執(zhí)行步驟C21 ;步驟C20 :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取與所述棧信息對(duì)應(yīng)的棧標(biāo)號(hào),順序執(zhí)行步驟C21 ;步驟C21 :判斷所述單步調(diào)試方式是否為單步進(jìn)入,是則執(zhí)行步驟C22,否則執(zhí)行步驟C24 ;步驟C22 :在所述事件列表中添加棧事件;步驟C23 :將事件列表中的單步調(diào)試標(biāo)志置位;步驟C24 :判斷所述設(shè)置單步操作的處理是否完成,是則執(zhí)行步驟C25,否則給發(fā)送裝置返回錯(cuò)誤信息;步驟C25 :將所述獲取的虛擬機(jī)線程ID、單步指令方式、單步調(diào)試方式存儲(chǔ)于事件列表中,生成事件序列號(hào)并將所述事件序列號(hào)寫入到響應(yīng)緩存的第一預(yù)設(shè)位置。其中,所述步驟C23具體為將事件列表中的單步調(diào)試標(biāo)志的通知模式設(shè)置為I。其中,所述步驟D根據(jù)預(yù)設(shè)規(guī)定在響應(yīng)緩存中設(shè)置第一返回?cái)?shù)據(jù),包括步驟Dl :在所述響應(yīng)緩存的第二預(yù)設(shè)位置寫入與所述請(qǐng)求ID對(duì)應(yīng)的響應(yīng)ID和與所述請(qǐng)求標(biāo)記匹配的響應(yīng)標(biāo)記;步驟D2 :在所述響應(yīng)緩存的第三預(yù)設(shè)位置寫入兩個(gè)字節(jié)的狀態(tài)碼,并判斷所述狀態(tài)碼是否為0,是則執(zhí)行步驟D3,否則執(zhí)行步驟D4 ;步驟D3 :在所述響應(yīng)緩存的第四預(yù)設(shè)位置寫入操作結(jié)果的實(shí)際數(shù)據(jù)長(zhǎng)度,順序執(zhí)行步驟D5 ;步驟D4:在所述響應(yīng)緩存的第四預(yù)設(shè)位置寫入返回的最小數(shù)據(jù)長(zhǎng)度,順序執(zhí)行步驟D5 ;步驟D5 :判斷所述響應(yīng)緩存的第三預(yù)設(shè)位置上的數(shù)據(jù)長(zhǎng)度是否大于0,是則將所述第一返回?cái)?shù)據(jù)返回給發(fā)送裝置,并清空所述響應(yīng)緩存中的第一返回?cái)?shù)據(jù),否則直接清空所述響應(yīng)緩存中的第一返回?cái)?shù)據(jù)。其中,所述步驟F具體包括
      步驟Fl :根據(jù)所述獲取的字節(jié)碼從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取函數(shù)信息,根據(jù)所述函數(shù)信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取所述字節(jié)碼的偏移信息;步驟F2 :根據(jù)所述函數(shù)信息和所述偏移信息在斷點(diǎn)列表中查找對(duì)應(yīng)的斷點(diǎn)信息,如找到則執(zhí)行步驟F3,如未找到則返回步驟E ;步驟F3 :從所述斷點(diǎn)信息中讀取與所述特殊字節(jié)碼對(duì)應(yīng)的原字節(jié)碼;步驟F4 :根據(jù)所述函數(shù)信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取類信息,根據(jù)所述類信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取類型標(biāo)識(shí),根據(jù)所述類型標(biāo)識(shí)從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中讀取相應(yīng)的簽名信息,根據(jù)所述簽名信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的返回?cái)?shù)據(jù);步驟F5 :用所述原字節(jié)碼替換所述虛擬機(jī)上當(dāng)前運(yùn)行的Java卡程序中的所述特殊字節(jié)碼。 其中,所述步驟F2具體包括在所述斷點(diǎn)列表中的斷點(diǎn)信息中查找是否有與所述函數(shù)信息和所述特殊字節(jié)碼相對(duì)應(yīng)的原字節(jié)碼,是則執(zhí)行步驟F3,否則給所述發(fā)送裝置返回錯(cuò)誤信息。其中,所述步驟H具體包括根據(jù)所述讀取的字節(jié)碼從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中讀取行信息,根據(jù)所述行信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取函數(shù)信息,根據(jù)所述函數(shù)信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取類信息,根據(jù)所述類信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取引用類型標(biāo)識(shí),根據(jù)所述引用類型標(biāo)識(shí)從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取相應(yīng)的簽名信息,根據(jù)所述簽名信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的返回?cái)?shù)據(jù)。其中,所述步驟G具體包括判斷事件列表中的單步調(diào)試標(biāo)志的通知模式是否為1,是則置位,否則未置位。本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn)本發(fā)明提供一種方便于上層應(yīng)用開發(fā)者對(duì)Java卡進(jìn)行調(diào)試的處理方法,通過(guò)對(duì)獲取的指令進(jìn)行解析并控制虛擬機(jī)執(zhí)行解析結(jié)果,以達(dá)到調(diào)試Java卡程序的目的;且在調(diào)試過(guò)程中實(shí)時(shí)監(jiān)視和查看虛擬機(jī)中的信息(如變量值、調(diào)用棧信息和內(nèi)存使用等);本發(fā)明中的處理方法可集成到主流的Java集成開發(fā)環(huán)境中,使得開發(fā)Java卡應(yīng)用變得更簡(jiǎn)單,只要熟悉目前主要的Java集成開發(fā)環(huán)境就能快速開發(fā)Java卡應(yīng)用,可以使用集成開發(fā)環(huán)境中的單步調(diào)試,斷點(diǎn)設(shè)置等功能。


      圖I為本發(fā)明實(shí)施例一提供的一種Java卡調(diào)試信息的處理方法流程圖;圖2為本發(fā)明實(shí)施例二提供的一種Java卡調(diào)試信息的處理方法流程圖;圖3為圖2中步驟108的實(shí)現(xiàn)過(guò)程流程圖;圖4為圖3中的調(diào)節(jié)器類型為單步調(diào)節(jié)器的處理過(guò)程流程圖;圖5為本發(fā)明實(shí)施例四提供的當(dāng)接收到調(diào)試指令時(shí)的處理過(guò)程流程圖。
      具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。實(shí)施例一本發(fā)明實(shí)施例一提供一種Java卡調(diào)試信息的處理方法,如圖I所示,包括步驟A :獲取指令并檢測(cè)指令類型,如是設(shè)置指令,則執(zhí)行步驟B,如是調(diào)試指令,則執(zhí)行步驟E,如是其他,則根據(jù)指令進(jìn)行操作; 本實(shí)施例中,獲取的指令可以為發(fā)送裝置法送的指令或者是命令緩存中存儲(chǔ)的指令;如獲取的指令的格式符合第一預(yù)設(shè)格式則為設(shè)置指令,如所述指令的格式符合APDU格式則為調(diào)試指令; 步驟BI :按照預(yù)設(shè)規(guī)定對(duì)設(shè)置指令進(jìn)行解析得到包頭和數(shù)據(jù)部分,對(duì)包頭進(jìn)行解析,從設(shè)置指令包頭的解析結(jié)果中獲取請(qǐng)求ID和請(qǐng)求標(biāo)記;步驟B2 :判斷請(qǐng)求標(biāo)記是否為預(yù)設(shè)值,是則執(zhí)行步驟C,否則給發(fā)送裝置返回提示
      信息;具體的,在本實(shí)施例中,在判斷請(qǐng)求標(biāo)記是否為預(yù)設(shè)值之前包括從設(shè)置指令包頭的解析結(jié)果中獲取指令長(zhǎng)度,根據(jù)指令長(zhǎng)度判斷設(shè)置指令是否完整,如完整則判斷設(shè)置指令是否為未處理指令,是則繼續(xù),否則結(jié)束,如不完整則結(jié)束;本實(shí)施例中的預(yù)設(shè)值為0x00 ;返回提示信息為從設(shè)置指令的請(qǐng)求標(biāo)記之后讀取的兩字節(jié)的數(shù)據(jù);步驟Cl :從設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令,檢測(cè)命令集的類型和命令對(duì)應(yīng)的事件類型,如命令集為事件請(qǐng)求命令集且命令對(duì)應(yīng)的事件類型為設(shè)置事件,則執(zhí)行步驟C2,如命令對(duì)應(yīng)的事件類型為其他事件則根據(jù)設(shè)置指令進(jìn)行操作;如命令集為其他命令集則根據(jù)設(shè)置指令進(jìn)行操作;步驟C2 :從解析結(jié)果中獲取調(diào)節(jié)器,并檢測(cè)調(diào)節(jié)器的種類,如是位置調(diào)節(jié)器則執(zhí)行步驟C3,如是單步調(diào)節(jié)器,則執(zhí)行步驟C3 ;本實(shí)施例中如獲取的調(diào)節(jié)器是其他調(diào)節(jié)器,則進(jìn)行相應(yīng)操作,具體操作不在本專利的保護(hù)范圍,故不詳述,步驟C3 :根據(jù)位置信息在虛擬機(jī)上運(yùn)行的Java卡程序中查找原字節(jié)碼,并用特殊字節(jié)碼替換原字節(jié)碼,將原字節(jié)碼寫到事件列表中生成事件序列號(hào),執(zhí)行步驟D ;步驟C4:設(shè)置單步調(diào)試信息,將事件寫到事件列表中生成事件序列號(hào),順序執(zhí)行步驟D ;步驟D :根據(jù)預(yù)設(shè)規(guī)則設(shè)置第一返回?cái)?shù)據(jù)并將其返回給發(fā)送裝置;本實(shí)施例中,根據(jù)預(yù)設(shè)規(guī)則設(shè)置第一返回?cái)?shù)據(jù)具體為步驟Dl :在響應(yīng)緩存的第二預(yù)設(shè)位置寫入與請(qǐng)求ID對(duì)應(yīng)的響應(yīng)ID和與請(qǐng)求標(biāo)記匹配的響應(yīng)標(biāo)記;步驟D2 :在響應(yīng)緩存的第三預(yù)設(shè)位置寫入兩個(gè)字節(jié)的狀態(tài)碼,并判斷狀態(tài)碼是否為0,是則執(zhí)行步驟D3,否則執(zhí)行步驟D4 ;步驟D3 :在響應(yīng)緩存的第四預(yù)設(shè)位置寫入操作結(jié)果的實(shí)際數(shù)據(jù)長(zhǎng)度,順序執(zhí)行步驟D5 ;
      步驟D4:在響應(yīng)緩存的第四預(yù)設(shè)位置寫入返回的最小數(shù)據(jù)長(zhǎng)度,順序執(zhí)行步驟D5 ;步驟D5 :判斷響應(yīng)緩存的第三預(yù)設(shè)位置上的數(shù)據(jù)長(zhǎng)度是否大于0,是則將第一返回?cái)?shù)據(jù)返回給發(fā)送裝置,并清空響應(yīng)緩存中的第一返回?cái)?shù)據(jù),否則直接清空響應(yīng)緩存中的第一返回?cái)?shù)據(jù);步驟E :獲取虛擬機(jī)上當(dāng)前運(yùn)行的Java卡程序的字節(jié)碼,判斷讀取的字節(jié)碼是否為特殊字節(jié)碼,是則執(zhí)行步驟F,否則執(zhí)行步驟G ;步驟F :根據(jù)獲取的字節(jié)碼從事件列表中查找對(duì)應(yīng)的原字節(jié)碼并用原字節(jié)碼替換獲取的字節(jié)碼,從虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I ;步驟G :判斷事件列表中的單步調(diào)試標(biāo)志是否置位,是則步驟H,否則返回步驟E ;
      步驟H:根據(jù)獲取的字節(jié)碼從所述虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I;步驟I :根據(jù)預(yù)設(shè)規(guī)則設(shè)置第二返回?cái)?shù)據(jù)并將其返回給發(fā)送裝置。本實(shí)施例中的步驟Cl-步驟C2和步驟E-步驟H可分別替換為步驟C’和步驟E,-步驟H’ ;步驟C’ 從設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令,如命令集為事件請(qǐng)求命令集且命令對(duì)應(yīng)的事件類型為設(shè)置事件,從解析結(jié)果中獲取調(diào)節(jié)器,如是位置調(diào)節(jié)器則根據(jù)位置信息在虛擬機(jī)上運(yùn)行的Java卡程序中查找原字節(jié)碼,并用特殊字節(jié)碼替換原字節(jié)碼,將原字節(jié)碼寫到事件列表中生成事件序列號(hào);如是單步調(diào)節(jié)器,則根據(jù)指令中的位置信息在虛擬機(jī)上運(yùn)行的Java卡程序中查找原字節(jié)碼,并用特殊字節(jié)碼替換原字節(jié)碼,并從指令中獲取單步調(diào)試信息,將單步事件寫到事件列表中生成事件序列號(hào);如命令對(duì)應(yīng)的事件類型為其他事件則根據(jù)設(shè)置指令執(zhí)行操作;如命令集為其他命令集則根據(jù)設(shè)置指令執(zhí)行操作;步驟E’ 對(duì)調(diào)試指令進(jìn)行解析并從解析結(jié)果中獲取字節(jié)碼,判斷所述獲取的字節(jié)碼是否為特殊字節(jié)碼,是則執(zhí)行步驟F’,否則結(jié)束本次操作,等待虛擬機(jī)下發(fā)指令;步驟F’ 判斷事件列表中的單步調(diào)試標(biāo)志是否置位,是則步驟G’,否則返回步驟H,;步驟G’ 根據(jù)獲取的字節(jié)碼從虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I ;步驟H’根據(jù)特殊字節(jié)碼從事件列表中查找對(duì)應(yīng)的原字節(jié)碼并用原字節(jié)碼替換特殊字節(jié)碼,從虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I。本實(shí)施例中的步驟Cl-步驟C2還可替換為步驟C” ;步驟C”從設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令,如命令集為事件請(qǐng)求命令集且命令對(duì)應(yīng)的事件類型為設(shè)置事件,從解析結(jié)果中獲取調(diào)節(jié)器,如是位置調(diào)節(jié)器則根據(jù)指令中的斷點(diǎn)位置信息從調(diào)試數(shù)據(jù)中讀取對(duì)應(yīng)的原字節(jié)碼并保存,用特殊字節(jié)碼代替原字節(jié)碼;將所述斷點(diǎn)位置信息事件種類一起添加到斷點(diǎn)列表中,在事件列表中添加出棧事件生成事件序列號(hào);如是單步調(diào)節(jié)器,則設(shè)置單步調(diào)試信息,將事件寫到事件列表中生成事件序列號(hào);如命令對(duì)應(yīng)的事件類型為其他事件則根據(jù)設(shè)置指令執(zhí)行操作;如命令集為其他命令集則根據(jù)設(shè)置指令執(zhí)行操作。
      實(shí)施例二本發(fā)明實(shí)施例二提供了一種Java卡調(diào)試信息的處理方法,如圖2所示,包括步驟101 :獲取指令并檢測(cè)指令類型,如是設(shè)置指令,則執(zhí)行步驟102,如是調(diào)試指令,則進(jìn)行調(diào)試處理,如是其他指令則執(zhí)行相應(yīng)操作;如是設(shè)置指令時(shí),在步驟101之前還包括接收發(fā)送裝置發(fā)送的設(shè)置指令并存儲(chǔ)到命令緩存中,步驟101中獲取指令為從命令緩存中獲取設(shè)置指令;如是調(diào)試指令,則步驟101中獲取指令為接收第一模塊發(fā)送的調(diào)試指令;本實(shí)施例中檢測(cè)指令的類型是通過(guò)檢測(cè)指令的格式來(lái)實(shí)現(xiàn)的;其中,調(diào)試指令是APDU指令格式;設(shè)置指令符合第一預(yù)設(shè)格式,設(shè)置指令包括包頭和數(shù)據(jù)部分,其中包頭是固定格式,包括五個(gè)字節(jié)段各字節(jié)段的長(zhǎng)度分別為四個(gè)字節(jié)、四個(gè)字節(jié)、一個(gè)字節(jié)、一個(gè)字 節(jié)、一個(gè)字節(jié)本實(shí)施例中,進(jìn)行調(diào)試處理的具體實(shí)現(xiàn)過(guò)程在實(shí)施例三中詳述;如檢測(cè)到指令類型是其他指令,不在本發(fā)明的保護(hù)范圍之內(nèi),故不進(jìn)行詳述;步驟102 :對(duì)設(shè)置指令進(jìn)行解析,得到包頭和數(shù)據(jù)部分,再對(duì)包頭進(jìn)行解析,從設(shè)置指令包頭的解析結(jié)果中獲取指令長(zhǎng)度;步驟103 :根據(jù)指令長(zhǎng)度判斷設(shè)置指令是否完整,是則執(zhí)行步驟104,否則結(jié)束操作;本實(shí)施例中,步驟103具體為判斷設(shè)置指令所占字節(jié)否與指令長(zhǎng)度相符,是則設(shè)置指令完整,否則設(shè)置指令不完整;步驟104 :從設(shè)置指令包頭的解析結(jié)果中獲取請(qǐng)求ID和請(qǐng)求標(biāo)記;本實(shí)施例中,請(qǐng)求ID和請(qǐng)求標(biāo)記在設(shè)置指令包頭的解析結(jié)果中的指令長(zhǎng)度之后,分別占四字節(jié)和一字節(jié);步驟105 :判斷請(qǐng)求標(biāo)記是否為預(yù)設(shè)值,是則執(zhí)行步驟107,否執(zhí)行步驟106 ;在本實(shí)施例中的請(qǐng)求標(biāo)記(Flags)的預(yù)設(shè)值為0x00 ;步驟106 :給發(fā)送裝置返回提示信息,執(zhí)行步驟115 ;本實(shí)施例中步驟106包括從設(shè)置指令的請(qǐng)求標(biāo)記之后獲取兩個(gè)字節(jié)數(shù)據(jù)并返回給發(fā)送裝置;步驟107 :從設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令;本實(shí)施例中的命令集和命令在設(shè)置指令包頭的解析結(jié)果中的請(qǐng)求標(biāo)記之后,各占一個(gè)字節(jié);本實(shí)施例中有18個(gè)命令集,如方法命令集、事件請(qǐng)求命令集等;方法命令集中包括行號(hào)表、變量表、字節(jié)碼、丟棄的函數(shù)、有簽名的變量表等命令,事務(wù)請(qǐng)求命令集(OF)中包括設(shè)置斷點(diǎn)、清除單個(gè)斷點(diǎn)、清除所有斷點(diǎn)等命令;步驟108 :根據(jù)命令集和命令進(jìn)行相應(yīng)操作,并將操作結(jié)果寫入到響應(yīng)緩存的第一預(yù)設(shè)位置;本實(shí)施例中具體以事件請(qǐng)求命令集為例進(jìn)行說(shuō)明,參見圖3和圖4,其他命令集不在本專利保護(hù)范圍內(nèi),故不進(jìn)行詳述;步驟109 :將響應(yīng)ID和與響應(yīng)標(biāo)記分別寫入到響應(yīng)緩存中的第二預(yù)設(shè)位置;本實(shí)施例中的響應(yīng)ID和請(qǐng)求ID相同,均為四個(gè)字節(jié);響應(yīng)標(biāo)記與請(qǐng)求標(biāo)記相匹配,均為一個(gè)字節(jié),具體值為0x80 ;
      本實(shí)施例中的響應(yīng)緩存中有包頭和數(shù)據(jù)部分,其中包頭包括第四預(yù)設(shè)位置、第二預(yù)設(shè)位置和第三預(yù)設(shè)位置,各個(gè)字節(jié)段的長(zhǎng)度分別為四個(gè)字節(jié)、五個(gè)字節(jié)、兩個(gè)字節(jié);數(shù)據(jù)部分為第一預(yù)設(shè)位置;步驟110 :在響應(yīng)緩存的第三預(yù)設(shè)位置寫入兩個(gè)字節(jié)狀態(tài)碼,并判斷狀態(tài)碼是否為0x0000,是則執(zhí)行步驟111,否則執(zhí)行步驟112 ;步驟111 :在響應(yīng)緩存的第四預(yù)設(shè)位置寫入操作結(jié)果的實(shí)際數(shù)據(jù)長(zhǎng)度,順序執(zhí)行步驟113 ;步驟112 :在響應(yīng)緩存的第四預(yù)設(shè)位置寫入返回的最小數(shù)據(jù)長(zhǎng)度,順序執(zhí)行步驟113 ;具體的,本實(shí)施例中返回的最小數(shù)據(jù)長(zhǎng)度為11 ;
      步驟113 :判斷響應(yīng)緩存的第四預(yù)設(shè)位置上的數(shù)據(jù)長(zhǎng)度是否大于0,是則執(zhí)行步驟114,否則執(zhí)行步驟115;步驟114 :將響應(yīng)緩存的數(shù)據(jù)發(fā)送給發(fā)送裝置,順序執(zhí)行步驟115 ;步驟115 :清空響應(yīng)緩存中的數(shù)據(jù);本實(shí)施例中也可不清空響應(yīng)緩存中數(shù)據(jù)而結(jié)束當(dāng)前操作。本實(shí)施例一的方法中,在接收到設(shè)置指令后首先對(duì)其進(jìn)行解析,然后根據(jù)解析結(jié)果進(jìn)行相應(yīng)操作,操作完成后根據(jù)預(yù)設(shè)格式設(shè)置返回?cái)?shù)據(jù),簡(jiǎn)化人工設(shè)置調(diào)試信息的過(guò)程。實(shí)施例三本實(shí)施例三是對(duì)實(shí)施例二中步驟108的詳細(xì)闡述,具體以事件請(qǐng)求命令集為例進(jìn)行說(shuō)明,如圖3和圖4所示,包括步驟201 :檢測(cè)獲取的命令集的類型,如是事件請(qǐng)求命令集,則執(zhí)行步驟202,否則根據(jù)獲取的設(shè)置指令進(jìn)行操作;具體的,在本實(shí)施例中,判斷獲取的命令集的值是否為15,是則為事件請(qǐng)求命令集,否則為其他命令集,進(jìn)行相應(yīng)的操作,其他命令集(如方法命令集、獲取虛擬機(jī)相關(guān)信息的虛擬機(jī)命令集、獲取類型信息的類命令集、數(shù)組命令集、接口命令集、獲取函數(shù)與變量信息的方法命令集、變量命令集、獲取棧信息的棧幀命令集等)的操作不在本專利的保護(hù)范圍之內(nèi),故不進(jìn)行詳述;步驟202 :判斷獲取的命令對(duì)應(yīng)的事件類型,如是清除單個(gè)斷點(diǎn)事件,則執(zhí)行步驟203 ;如是清除所有斷點(diǎn)事件,則執(zhí)行步驟206 ;如是設(shè)置事件,則執(zhí)行步驟209 ;本實(shí)施例中,步驟202具體為檢測(cè)所述獲取的命令所對(duì)應(yīng)的值,如是01則為設(shè)置事件,如是02則為清除單個(gè)斷點(diǎn)事件,如是03則為清除所有斷點(diǎn)事件;步驟203 :對(duì)設(shè)置指令的數(shù)據(jù)部分進(jìn)行解析,從設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取事件種類和事件請(qǐng)求ID ;本實(shí)施例中的事件種類占一個(gè)字節(jié),事件請(qǐng)求ID占四個(gè)字節(jié);步驟204 :根據(jù)事件種類和事件請(qǐng)求ID在事件列表中查找對(duì)應(yīng)的事件,并判斷是否找到匹配的事件,是則執(zhí)行步驟205,否則給發(fā)送裝置返回未找到匹配事件的信息;步驟205 :結(jié)束當(dāng)前操作并清空響應(yīng)緩存中的數(shù)據(jù);本實(shí)施例中該步驟205中也可不用清空響應(yīng)緩存中的數(shù)據(jù)直接結(jié)束操作;步驟206 :在事件列表中查找所有斷點(diǎn)事件;
      步驟207 :清空所述事件列表中的所有斷點(diǎn)事件的信息,并判斷是否清空完成,是則執(zhí)行步驟208,否則給發(fā)送裝置返回錯(cuò)誤信息;步驟208 :清空響應(yīng)緩存中的數(shù)據(jù)并結(jié)束當(dāng)前操作;本實(shí)施例中該步驟208中可不清空響應(yīng)緩存中的數(shù)據(jù)直接結(jié)束當(dāng)前操作;步驟209 :從設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取事件種類和暫停政策;本實(shí)施例中,事件種類和暫停政策在所述設(shè)置指令數(shù)據(jù)部分的事件請(qǐng)求ID之后,且各占一個(gè)字節(jié);暫停政策為00表示暫停所有線程,暫停政策為01表示暫停當(dāng)前線程等;步驟210 :從設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取調(diào)節(jié)器個(gè)數(shù),并根據(jù)調(diào)節(jié)器個(gè)數(shù)分配事件處理需要的緩存;
      本實(shí)施例中的調(diào)節(jié)器個(gè)數(shù)在設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中的暫停政策之后,占四個(gè)字節(jié);步驟211 :判斷調(diào)節(jié)器個(gè)數(shù)是否為0,是則給發(fā)送裝置返回錯(cuò)誤信息,否則執(zhí)行步驟 212 ;步驟212 :從設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取調(diào)節(jié)器的種類,如是位置調(diào)節(jié)器,則進(jìn)行設(shè)置斷點(diǎn)操作,執(zhí)行步驟213 ;如是單步調(diào)節(jié)器,則進(jìn)行設(shè)置單步操作,執(zhí)行步驟216 ;如是其他調(diào)節(jié)器,則進(jìn)行其他調(diào)節(jié)器的相應(yīng)操作;如不是調(diào)節(jié)器,則給發(fā)送裝置返回錯(cuò)誤信息;具體的,本實(shí)施例中,調(diào)節(jié)器的種類在設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中的調(diào)解器個(gè)數(shù)之后,如獲取的值為8則為位置調(diào)節(jié)器,如獲取的值為12則為單步調(diào)節(jié)器;其他調(diào)節(jié)器(如計(jì)數(shù)器調(diào)節(jié)器、依賴條件調(diào)節(jié)器、線程調(diào)節(jié)器、類型調(diào)節(jié)器、類型排除調(diào)節(jié)器、類型匹配調(diào)節(jié)器、異常調(diào)節(jié)器、變量調(diào)節(jié)器、對(duì)象實(shí)體調(diào)節(jié)器)的相應(yīng)操作不在本專利保護(hù)范圍之內(nèi),故不進(jìn)行詳述;步驟213 :從設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取斷點(diǎn)位置信息并進(jìn)行存儲(chǔ),斷點(diǎn)位置信息包括引用類型標(biāo)識(shí)、引用類型ID、函數(shù)ID和偏移信息;本實(shí)施例中,斷點(diǎn)位置信息在設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中的調(diào)節(jié)器種類之后,其中類型標(biāo)識(shí)占一個(gè)字節(jié)、引用類型標(biāo)識(shí)ID占四個(gè)字節(jié)、函數(shù)ID占四個(gè)字節(jié)、偏移信息占八個(gè)字節(jié);本實(shí)施例中的類型標(biāo)識(shí)如為00則表示類;如為01則表示接口 ;如為02則表示數(shù)組;步驟214:根據(jù)引用類型標(biāo)識(shí)、引用類型ID、函數(shù)ID和偏移信息在預(yù)先下載到虛擬機(jī)中的Java卡程序中查找對(duì)應(yīng)的位置,讀取該位置的原字節(jié)碼并保存,用特定字節(jié)碼替換原字節(jié)碼;具體的,本實(shí)施例中的特定字節(jié)碼為非java卡自身的字節(jié)碼,如0xC2 ;本實(shí)施例中的步驟214具體為根據(jù)引用類型標(biāo)識(shí)在Java卡程序中找到當(dāng)前類型,根據(jù)引用類型ID在當(dāng)前類型中找到具體的類(當(dāng)前類型(或接口或者數(shù)組)中的第幾個(gè)類(或接口或者數(shù)組)),再在找到的具體類(或接口或數(shù)組)里根據(jù)函數(shù)ID找到對(duì)應(yīng)的當(dāng)前函數(shù),根據(jù)偏移信息在當(dāng)前函數(shù)中找到原字節(jié)碼;比如類型ID為00,類型ID為03,函數(shù)ID為04,偏移信息為08,則查找原字節(jié)碼具體為根據(jù)00找到類,根據(jù)03找到第三個(gè)類,根據(jù)04在第三個(gè)類中找到第四個(gè)函數(shù),根據(jù)08在第四個(gè)函數(shù)中找到位于偏移8字節(jié)位置處的原字節(jié)碼;步驟215 :將斷點(diǎn)信息(包括原字節(jié)碼和斷點(diǎn)位置信息)和事件種類一起添加到斷點(diǎn)列表中,將事件寫入到事件列表中生成事件序列號(hào),將該事件序列號(hào)寫入到響應(yīng)緩存的
      第一預(yù)設(shè)位置;本實(shí)施例中的響應(yīng)緩存的第一預(yù)設(shè)位置是數(shù)據(jù)部分;步驟216 :從設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取虛擬機(jī)線程ID、Java卡程序的單步指令方式和單步調(diào)試方式;在本實(shí)施例中,虛擬機(jī)線程ID、Java卡程序的單步指令方式和單步調(diào)試方式在設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中的調(diào)節(jié)器種類之后;
      本實(shí)施例中,虛擬機(jī)調(diào)用函數(shù)中還有被調(diào)用的函數(shù);具體的,單步指令方式包括第一單步指令方式(即控制Java虛擬機(jī)以一句代碼為單元進(jìn)行運(yùn)行)和第二單步指令方法(即控制java虛擬機(jī)以一行代碼為單元進(jìn)行運(yùn)行);單步調(diào)試方式包括單步進(jìn)入(當(dāng)虛擬機(jī)接收到單步進(jìn)入命令時(shí),本實(shí)施例的方法控制虛擬機(jī)進(jìn)入被調(diào)用的函數(shù)內(nèi)執(zhí)行)、單步跳過(guò)(當(dāng)虛擬機(jī)接收到單步跳過(guò)命令時(shí),本實(shí)施例的方法控制虛擬機(jī)跳過(guò)被調(diào)用的函數(shù)繼續(xù)執(zhí)行調(diào)用函數(shù))和單步跳出(當(dāng)虛擬機(jī)接收到單步進(jìn)出命令時(shí),本實(shí)施例的方法控制虛擬機(jī)跳出被調(diào)用函數(shù)繼續(xù)執(zhí)行調(diào)用函數(shù));步驟217 :判斷單步指令方式是否為第一指令方式或單步調(diào)試方式是否為單步進(jìn)入,是則執(zhí)行步驟221,否則執(zhí)行步驟218 ;步驟218 :從設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取Java卡程序行對(duì)應(yīng)的棧信息;本實(shí)施例中,棧信息在設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中的單步調(diào)試方式之后;虛擬機(jī)可通過(guò)棧信息將觸發(fā)事件(單步觸發(fā)或斷點(diǎn)觸發(fā))反饋給發(fā)送裝置;步驟219 :判斷單步指令方式是否為第二指令方式,是則執(zhí)行步驟220,否則執(zhí)行步驟221 ;步驟220 :從設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取與棧信息對(duì)應(yīng)的棧標(biāo)號(hào);本實(shí)施例中的棧標(biāo)號(hào)在設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中的棧信息之后;步驟221 :判斷單步調(diào)試方式是否為單步進(jìn)入,是則執(zhí)行步驟222,否則執(zhí)行步驟224 ;步驟222 :在事件列表中添加出棧事件;本實(shí)施例中,出棧事件是虛擬機(jī)在觸發(fā)事件結(jié)束后的事件處理過(guò)程;棧事件的內(nèi)容包括調(diào)試器個(gè)數(shù)、暫停政策、虛擬機(jī)線程ID、調(diào)試器種類;步驟223 :將事件列表中的單步調(diào)試標(biāo)志置位,順序執(zhí)行步驟224 ;本實(shí)施例中,步驟223具體為將事件列表中的單步調(diào)試標(biāo)志的通知模式設(shè)置為
      I;步驟224 :判斷設(shè)置單步操作的處理是否完成,是則執(zhí)行步驟225,否則給發(fā)送裝置返回錯(cuò)誤信息;步驟225 :將獲取的虛擬機(jī)線程ID、Java卡程序的單步指令方式、單步調(diào)試方式存儲(chǔ)于事件列表中,生成事件序列號(hào)并將其寫入到響應(yīng)緩存的第一預(yù)設(shè)位置;本實(shí)施例中相應(yīng)緩存的第一預(yù)設(shè)位置是數(shù)據(jù)部分。實(shí)施例四
      本發(fā)明實(shí)施例四提供當(dāng)接收到調(diào)試指令時(shí)的處理過(guò)程,包括步驟401 :獲取虛擬機(jī)上當(dāng)前運(yùn)行的Java卡程序的當(dāng)前字節(jié)碼;本實(shí)施例中,當(dāng)接收到調(diào)試指令后觸發(fā)進(jìn)行調(diào)試處理,獲取虛擬機(jī)上當(dāng)前運(yùn)行的Java卡程序的當(dāng)前字節(jié)碼;步驟402 :判斷獲取的當(dāng)前字節(jié)碼是否為特殊字節(jié)碼,是則執(zhí)行步驟403,否則413 ;當(dāng)虛擬機(jī)運(yùn)行到特殊字節(jié)碼時(shí),本實(shí)施例中的方法控制虛擬機(jī)暫停運(yùn)行,直到接收到啟動(dòng)虛擬機(jī)運(yùn)行的調(diào)試指令后再次運(yùn)行,如單步指令等;本實(shí)施例中,如當(dāng)前字節(jié)碼為特殊字節(jié)碼且調(diào)試標(biāo)識(shí)置位則為單步事件,如當(dāng)前字節(jié)碼為特殊字節(jié)碼且調(diào)試標(biāo)識(shí)未置位則為斷點(diǎn)事件; 步驟403 :根據(jù)獲取的字節(jié)碼從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取函數(shù)信息;步驟404 :根據(jù)函數(shù)信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取偏移信息;本實(shí)施例中的偏移信息為當(dāng)前運(yùn)行代碼在當(dāng)前函數(shù)中的偏移值;步驟405 :根據(jù)獲取的函數(shù)信息和偏移信息在事件列表中查找對(duì)應(yīng)的斷點(diǎn)信息,如找到則執(zhí)行步驟406,如未找到則返回步驟401 ;本實(shí)施例中的步驟405具體包括在事件列表中的斷點(diǎn)信息中查找是否有與獲取的函數(shù)信息和特殊字節(jié)碼相對(duì)應(yīng)的原字節(jié)碼,是則執(zhí)行步驟406,否則結(jié)束;步驟406 :從事件列表的斷點(diǎn)信息中讀取對(duì)應(yīng)的原字節(jié)碼;步驟407 :根據(jù)函數(shù)信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取類信息;本實(shí)施例中的類信息包括類、接口、數(shù)組等;步驟408 :根據(jù)類信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的類型標(biāo)識(shí);步驟409 :根據(jù)類型標(biāo)識(shí)從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取簽名信息;本實(shí)施例中的簽名信息包括類型名稱、訪問(wèn)修飾符等;步驟410 :根據(jù)簽名信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的返回?cái)?shù)據(jù);本實(shí)施例中的函數(shù)信息、位置信息、類信息、類型標(biāo)識(shí)、對(duì)應(yīng)的數(shù)據(jù)等都預(yù)先發(fā)送給虛擬機(jī)進(jìn)行存儲(chǔ)的;本實(shí)施例中獲取的數(shù)據(jù)包括一個(gè)字節(jié)的暫停政策、四個(gè)字節(jié)的當(dāng)前返回?cái)?shù)據(jù)中包含的已觸發(fā)的事件個(gè)數(shù)、一個(gè)字節(jié)的事件類型、四個(gè)字節(jié)的事件請(qǐng)求ID、四個(gè)字節(jié)事件觸發(fā)線程ID和位置信息,其中位置信息包括一個(gè)字節(jié)的類型標(biāo)識(shí)、四個(gè)字節(jié)的引用類型ID、四個(gè)字節(jié)的函數(shù)ID和八個(gè)字節(jié)的偏移信息;其中,如當(dāng)前操作是單步調(diào)試過(guò)程中的單步進(jìn)入觸發(fā),事件類型為O ;如當(dāng)前操作是單步調(diào)試的單步跳過(guò)觸發(fā),事件類型為I ;如當(dāng)前操作是斷點(diǎn)觸發(fā)時(shí),事件類型為2 ;如當(dāng)前操作時(shí)單步調(diào)試的單步跳出時(shí),事件類型為3 ;步驟411 :按照預(yù)設(shè)格式設(shè)置第二返回?cái)?shù)據(jù),并將其發(fā)送給發(fā)送裝置;本實(shí)施例中的第二返回?cái)?shù)據(jù)包括包頭和數(shù)據(jù)部分,包頭格式參照實(shí)施例一中的返回?cái)?shù)據(jù)的包頭格式,在此不再贅述,將獲取的返回?cái)?shù)據(jù)作為數(shù)據(jù)部分;步驟412 :用原字節(jié)碼替換虛擬機(jī)上當(dāng)前運(yùn)行的Java卡程序的特殊字節(jié)碼,執(zhí)行步驟420 ;本實(shí)施例中的發(fā)送裝置可將接收的數(shù)據(jù)和信息顯示出來(lái),方便用戶實(shí)時(shí)監(jiān)測(cè)和查看。步驟413 :判斷事件列表中的單步調(diào)試標(biāo)志是否置位,是則執(zhí)行步驟414,否則返回步驟401 ;本實(shí)施例中,步驟413具體為判斷事件列表中的單步調(diào)試標(biāo)志的通知模式是否為I ;本實(shí)施例中,當(dāng)單步調(diào)試標(biāo)志位置時(shí),本實(shí)施例的方法控制虛擬機(jī)進(jìn)行單步調(diào)試,包括單步進(jìn)入、單步跳出和單步跳出;步驟414 :根據(jù)獲取的字節(jié)碼從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取行信息;步驟415 :根據(jù)行信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取函數(shù)信息,根據(jù)函數(shù)信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取的類信息; 本實(shí)施例中的類信息包括類、接口、數(shù)組等;步驟416 :根據(jù)類信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取引用類型標(biāo)識(shí);步驟417 :根據(jù)引用類型標(biāo)識(shí)從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取簽名信息;步驟418 :根據(jù)簽名信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的返回?cái)?shù)據(jù);步驟419 :按照預(yù)設(shè)格式設(shè)置第二返回?cái)?shù)據(jù),并將其發(fā)送給發(fā)送裝置,順序執(zhí)行步驟 420 ;本實(shí)施例中的返回?cái)?shù)據(jù)格式可參照步驟411實(shí)現(xiàn),在此不再贅述;步驟420 :等待接收調(diào)試指令,當(dāng)接收到調(diào)試指令時(shí),返回步驟401。下面以具體的實(shí)例來(lái)說(shuō)明本發(fā)明的實(shí)現(xiàn)過(guò)程,具體的以調(diào)試信息為斷點(diǎn)信息的為例;虛擬機(jī)接收到發(fā)送裝置發(fā)送的設(shè)置指令為00 00 00 23 00 00 00 54 00 OF 01
      0201 00 00 00 01 07 01 00 00 01 08 00 CB CE B8 00 00 00 00 00 00 00 07 ;虛擬機(jī)對(duì)上述指令進(jìn)行解析,解析結(jié)果為00 00 00 23表示指令長(zhǎng)度,00 00 00 54表示請(qǐng)求ID,00表示請(qǐng)求標(biāo)記,OF表示命令集,01表示命令,02表示事件種類中的中斷類型,01表示暫停政策中的暫停當(dāng)前線程,00 00 00 01表示調(diào)節(jié)器個(gè)數(shù),07表示調(diào)節(jié)器種類中的位置調(diào)節(jié)器,01表示類型標(biāo)識(shí),0000 01 08表示引用類型標(biāo)識(shí)ID,00 CB CE B8表示函數(shù)ID,00 00 00 00 00 00 00 07表示
      偏移息;步驟114中虛擬機(jī)給發(fā)送裝置返回的第一返回?cái)?shù)據(jù)為00 00 00 OF 00 00 0054 80 00 00 00 00 00 12 ;其中,00 00 00 OF表示返回的實(shí)際數(shù)據(jù)長(zhǎng)度,00 00 00 54表示請(qǐng)求ID,80表示響應(yīng)標(biāo)記,00 00表示沒(méi)有錯(cuò)誤而寫入的兩個(gè)字節(jié)狀態(tài)碼,00 00 00 12表示生成的斷點(diǎn)事件序列號(hào);實(shí)施例四中調(diào)試觸發(fā)斷點(diǎn)時(shí)在在步驟411中給發(fā)送裝置返回的第二返回?cái)?shù)據(jù)為包頭“00 00 00 2A 00 00 00 03 00 00 00” 和數(shù)據(jù)信息“01 00 00 00 01 02 00 00 0012 00 00 01 04 01 00 00 01 08 00 CB CE B8 00 00 00 00 00 00 00 07”;其中,00 00 00 2A表示數(shù)據(jù)長(zhǎng)度,00 00 00 03表示事件觸發(fā)的標(biāo)識(shí)(說(shuō)明是第三次觸發(fā)該事件),00表示響應(yīng)標(biāo)記,00 00表示沒(méi)有錯(cuò)誤而寫入的兩個(gè)狀態(tài)碼,01表示暫停政策中的暫停當(dāng)前線程,00 00 00 01表示的是當(dāng)前返回?cái)?shù)據(jù)中包含的已觸發(fā)的事件個(gè)數(shù)(當(dāng)有多線程運(yùn)行時(shí),同一個(gè)斷點(diǎn)可能被多個(gè)線程觸發(fā),就有多個(gè)事件被觸發(fā),本實(shí)施例中只有一個(gè)事件被觸發(fā)),02表示中斷事件,OO 00 00 12表示事件序列號(hào),00 00 01 04表示事件觸發(fā)線程ID,01表示類型標(biāo)識(shí),00 00 01 08表示引用類型標(biāo)識(shí),00 CB CE B8表示函數(shù)ID,00 00 00 00 00 00 00 07表示偏移信息。在本發(fā)明實(shí)施例中,單步調(diào)節(jié)器的實(shí)現(xiàn)方式還有另一種方法,即實(shí)施例二中的步驟216-步驟225替換為216’-步驟219’,其他步驟的實(shí)現(xiàn)方式和實(shí)施例二相同,在此不再贅述;步驟216’ 從設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取斷點(diǎn)位置信息并進(jìn)行存儲(chǔ),斷點(diǎn)位置信息包括引用類型標(biāo)識(shí)、引用·類型ID、函數(shù)ID和偏移信息;步驟217’ 根據(jù)引用類型標(biāo)識(shí)、引用類型ID、函數(shù)ID和偏移信息在預(yù)先下載到虛擬機(jī)中的Java卡程序中查找對(duì)應(yīng)的位置,讀取該位置的原字節(jié)碼并保存,用特定字節(jié)碼替換原字節(jié)碼;步驟218’ 從設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取虛擬機(jī)線程ID、Java卡程序的單步指令方式和單步調(diào)試方式;步驟219’ 將斷點(diǎn)信息(包括原字節(jié)碼和斷點(diǎn)位置信息)和事件信息(包括事件種類、虛擬機(jī)線程ID、Java卡程序的單步指令方式和單步調(diào)試方式)一起添加到單步列表中,將事件寫入到事件列表中生成事件序列號(hào),將該事件序列號(hào)寫入到響應(yīng)緩存的第一預(yù)設(shè)位置,將單步標(biāo)識(shí)置位。相應(yīng)的,在虛擬機(jī)進(jìn)行調(diào)試時(shí),虛擬機(jī)每讀取一個(gè)字節(jié)碼發(fā)送給處理裝置并停止運(yùn)行,處理裝置接收到字節(jié)碼后執(zhí)行相應(yīng)操作,即處理裝置接收到調(diào)試指令的處理過(guò)程包括步驟401’對(duì)調(diào)試指令進(jìn)行解析,并從解析結(jié)果中獲取字節(jié)碼,判斷獲取的字節(jié)碼是否為特殊字節(jié)碼,是則執(zhí)行步驟402’,否則結(jié)束,等待虛擬機(jī)下發(fā)指令;步驟402’:判斷解析結(jié)果中單步標(biāo)識(shí)是否置位,是則執(zhí)行步驟413’,否則執(zhí)行步驟403,;步驟402’具體為判斷事件列表中的單步調(diào)試標(biāo)志的通知模式是否為I ;本實(shí)施例中,當(dāng)單步調(diào)試標(biāo)志位置時(shí),本實(shí)施例的方法控制虛擬機(jī)進(jìn)行單步調(diào)試,包括單步進(jìn)入、單步跳出和單步跳出;步驟403’ 根據(jù)獲取的字節(jié)碼從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取函數(shù)信息;步驟404’ 根據(jù)函數(shù)信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取偏移信息;本實(shí)施例中的偏移信息為當(dāng)前運(yùn)行代碼在當(dāng)前函數(shù)中的偏移值;步驟405’ 根據(jù)獲取的函數(shù)信息和偏移信息在事件列表中查找對(duì)應(yīng)的斷點(diǎn)信息,如找到則執(zhí)行步驟406’,如未找到則返回步驟401’ ;本實(shí)施例中的步驟405’具體包括在事件列表中的斷點(diǎn)信息中查找是否有與獲取的函數(shù)信息和特殊字節(jié)碼相對(duì)應(yīng)的原字節(jié)碼,是則執(zhí)行步驟406’,否則結(jié)束;步驟406’ 從事件列表的斷點(diǎn)信息中讀取對(duì)應(yīng)的原字節(jié)碼;步驟407’ 根據(jù)函數(shù)信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取類信息;本實(shí)施例中的類信息包括類、接口、數(shù)組等;步驟408’ 根據(jù)類信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的類型標(biāo)識(shí);
      步驟409’ 根據(jù)類型標(biāo)識(shí)從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取簽名信息;本實(shí)施例中的簽名信息包括類型名稱、訪問(wèn)修飾符等;步驟410’ 根據(jù)簽名信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的返回?cái)?shù)據(jù);本實(shí)施例中的函數(shù)信息、位置信息、類信息、類型標(biāo)識(shí)、對(duì)應(yīng)的數(shù)據(jù)等都是預(yù)先發(fā)送給虛擬機(jī)進(jìn)行存儲(chǔ)的;本實(shí)施例中獲取的數(shù)據(jù)包括一個(gè)字節(jié)的暫停政策、四個(gè)字節(jié)的當(dāng)前返回?cái)?shù)據(jù)中包含的已觸發(fā)的事件個(gè)數(shù)、一個(gè)字節(jié)的事件類型、四個(gè)字節(jié)的事件請(qǐng)求ID、四個(gè)字節(jié)事件觸發(fā)線程ID和位置信息,其中位置信息包括一個(gè)字節(jié)的類型標(biāo)識(shí)、四個(gè)字節(jié)的引用類型ID、四個(gè)字節(jié)的函數(shù)ID和八個(gè)字節(jié)的偏移信息;其中,如當(dāng)前操作是單步調(diào)試過(guò)程中的單步進(jìn)入觸發(fā),事件類型為O ;如當(dāng)前操作 是單步調(diào)試的單步跳過(guò)觸發(fā),事件類型為I ;如當(dāng)前操作是斷點(diǎn)觸發(fā)時(shí),事件類型為2 ;如當(dāng)前操作時(shí)單步調(diào)試的單步跳出時(shí),事件類型為3 ;步驟411’ 按照預(yù)設(shè)格式設(shè)置第二返回?cái)?shù)據(jù),并將其發(fā)送給發(fā)送裝置;本實(shí)施例中的第二返回?cái)?shù)據(jù)包括包頭和數(shù)據(jù)部分,包頭格式參照實(shí)施例一中的返回?cái)?shù)據(jù)的包頭格式,在此不再贅述,將獲取的返回?cái)?shù)據(jù)作為數(shù)據(jù)部分;步驟412’ 用原字節(jié)碼替換虛擬機(jī)上當(dāng)前運(yùn)行的Java卡程序的特殊字節(jié)碼,并給虛擬機(jī)返回單步提示信息;本實(shí)施例中的發(fā)送裝置可將接收的數(shù)據(jù)和信息顯示出來(lái),方便用戶實(shí)時(shí)監(jiān)測(cè)和查看;步驟413’ 根據(jù)獲取的字節(jié)碼從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取行信息;步驟414’ 根據(jù)行信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取函數(shù)信息,根據(jù)函數(shù)信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取的類信息;本實(shí)施例中的類信息包括類、接口、數(shù)組等;步驟415’ 根據(jù)類信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取引用類型標(biāo)識(shí);步驟416’ 根據(jù)引用類型標(biāo)識(shí)從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取簽名信息;步驟417’ 根據(jù)簽名信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的返回?cái)?shù)據(jù);步驟418’ 按照預(yù)設(shè)格式設(shè)置第二返回?cái)?shù)據(jù),并將其發(fā)送給發(fā)送裝置;步驟419’ 用存儲(chǔ)的原字節(jié)碼代替虛擬機(jī)上當(dāng)前運(yùn)行的Java程序的特殊字節(jié)碼,并給虛擬機(jī)返回單步提示信息;虛擬機(jī)在接收到單步提示信息之后,如是斷點(diǎn)調(diào)試,則虛擬機(jī)開始運(yùn)行執(zhí)行字節(jié)碼;如是單步調(diào)試,則虛擬機(jī)開始運(yùn)行執(zhí)行字節(jié)碼,進(jìn)行單步調(diào)試。在本發(fā)明實(shí)施例中,如處理裝置設(shè)置在虛擬機(jī)中,則實(shí)施例二中的步驟213-步驟215相應(yīng)的替換為sl_s3,其他步驟的實(shí)現(xiàn)方式和實(shí)施例二的步驟一樣,在此不再贅述;步驟Si :從設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取Java卡程序行對(duì)應(yīng)的棧信息和棧標(biāo)號(hào);本實(shí)施例中,虛擬機(jī)可通過(guò)棧信息將觸發(fā)事件(斷點(diǎn)觸發(fā))反饋給發(fā)送裝置;棧標(biāo)號(hào)包括函數(shù)位置和偏移值;步驟s2 :根據(jù)棧標(biāo)號(hào)在預(yù)先下載到虛擬機(jī)中的Java卡程序中查找對(duì)應(yīng)的位置,讀取該位置的原字節(jié)碼并保存,用特殊字節(jié)碼代替原字節(jié)碼;
      步驟s3 :將斷點(diǎn)信息(棧標(biāo)號(hào)和原字節(jié)碼)和事件種類一起添加到斷點(diǎn)列表中,在事件列表中添加出棧事件生成事件序列號(hào),將該事件序列號(hào)寫入到響應(yīng)緩存的第一預(yù)設(shè)位置。相應(yīng)的,在虛擬機(jī)進(jìn)行調(diào)試時(shí),虛擬機(jī)讀取到字節(jié)碼后先進(jìn)行判斷,如不是特殊字節(jié)碼是則繼續(xù)運(yùn)行程序并讀取下一個(gè)字節(jié)碼;如是特殊字節(jié)碼,則停止運(yùn)行,進(jìn)行調(diào)試操作,如單步標(biāo)識(shí)置位,則執(zhí)行單步調(diào)試操作,否則執(zhí)行斷點(diǎn)調(diào)試操作;即實(shí)施例三中的步驟401-步驟419所有操作都有虛擬機(jī)完成,分別替換為步驟401’’ -步驟419’’ 步驟401’ ’ 虛擬機(jī)讀取當(dāng)前運(yùn)行的Java卡程序的字節(jié)碼;步驟402’ ’ :虛擬機(jī)判斷讀取的字節(jié)碼是否為特殊字節(jié)碼,是則執(zhí)行步驟403”,否則執(zhí)行步驟413”;
      步驟403’ ’ 虛擬機(jī)根據(jù)獲取的字節(jié)碼從存儲(chǔ)的調(diào)試數(shù)據(jù)中獲取函數(shù)信息;步驟404’ ’ 虛擬機(jī)根據(jù)函數(shù)信息從存儲(chǔ)的調(diào)試數(shù)據(jù)中獲取偏移信息;步驟405’ ’ 虛擬機(jī)根據(jù)獲取的函數(shù)信息和偏移信息在事件列表中查找對(duì)應(yīng)的斷點(diǎn)信息,如找到則執(zhí)行步驟406”,如未找到則返回步驟401” ;步驟406’ ’ :虛擬機(jī)從事件列表的斷點(diǎn)信息中讀取對(duì)應(yīng)的原字節(jié)碼;步驟407’ ’ 虛擬機(jī)根據(jù)函數(shù)信息從存儲(chǔ)的調(diào)試數(shù)據(jù)中獲取類信息;步驟408’ ’ 虛擬機(jī)根據(jù)類信息從虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的類型標(biāo)識(shí);步驟409’ ’ 虛擬機(jī)根據(jù)類型標(biāo)識(shí)從存儲(chǔ)的調(diào)試數(shù)據(jù)中獲取簽名信息;步驟410’ ’ 虛擬機(jī)根據(jù)簽名信息從存儲(chǔ)的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的返回?cái)?shù)據(jù);步驟411’’ 虛擬機(jī)按照預(yù)設(shè)格式設(shè)置第二返回?cái)?shù)據(jù),并將其發(fā)送給發(fā)送裝置;步驟412’ ’ 虛擬機(jī)用原字節(jié)碼替換虛擬機(jī)上當(dāng)前運(yùn)行的Java卡程序的特殊字節(jié)碼;步驟413’ ’:判斷事件列表中的單步調(diào)試標(biāo)志是否置位,是則執(zhí)行步驟414’ ’,否則返回步驟401’’ ;步驟414’ ’ 根據(jù)獲取的字節(jié)碼從預(yù)先下載存儲(chǔ)的調(diào)試數(shù)據(jù)中獲取行信息;步驟415’ ’ 根據(jù)行信息從調(diào)試數(shù)據(jù)中獲取函數(shù)信息,根據(jù)函數(shù)信息從調(diào)試數(shù)據(jù)中獲取的類信息;本實(shí)施例中的類信息包括類、接口、數(shù)組等;步驟416’ ’ 根據(jù)類信息從調(diào)試數(shù)據(jù)中獲取引用類型標(biāo)識(shí);步驟417’ ’ 根據(jù)引用類型標(biāo)識(shí)從調(diào)試數(shù)據(jù)中獲取簽名信息;步驟418’ ’ 根據(jù)簽名信息從調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的返回?cái)?shù)據(jù);步驟419’ ’ 按照預(yù)設(shè)格式設(shè)置第二返回?cái)?shù)據(jù),并將其發(fā)送給發(fā)送裝置。本實(shí)施例中,當(dāng)單步調(diào)試標(biāo)志置位,控制虛擬機(jī)進(jìn)行單步進(jìn)入調(diào)試時(shí),獲取虛擬機(jī)的棧個(gè)數(shù)為2 (從java卡應(yīng)用入口算),獲取的棧頂位置為420 ;在虛擬機(jī)執(zhí)行完該函數(shù)時(shí)即觸發(fā)出棧事件,棧頂位置變成410 (棧由10字節(jié)保存),棧個(gè)數(shù)變?yōu)镮。本發(fā)明的處理裝置可以和虛擬機(jī)分別單獨(dú)設(shè)置進(jìn)行工作,處理裝置將接收到的設(shè)置指令進(jìn)行處理并將結(jié)果返回給發(fā)送裝置,處理裝置在接收到調(diào)試指令時(shí)從虛擬機(jī)上獲取當(dāng)前執(zhí)行的字節(jié)碼進(jìn)行判斷處理,進(jìn)而來(lái)控制虛擬機(jī)進(jìn)行調(diào)試;或者處理裝置也可以和虛擬機(jī)相互嵌套設(shè)置進(jìn)行工作,處理裝置將接收到的設(shè)置指令進(jìn)行處理并將結(jié)果返回給發(fā)送裝置,處理裝置在接收到調(diào)試指令時(shí)從虛擬機(jī)上獲取當(dāng)前執(zhí)行的字節(jié)碼進(jìn)行判斷處理,進(jìn)而來(lái)控制虛擬機(jī)進(jìn)行調(diào)試;或者處理裝置還可設(shè)置在虛擬機(jī)中進(jìn)行工作,當(dāng)虛擬機(jī)將接收到的設(shè)置指令進(jìn)行處理并將結(jié)果返回給發(fā)送裝置,虛擬機(jī)在接收到調(diào)試指令時(shí)獲取當(dāng)前執(zhí)行的字節(jié)碼進(jìn)行判斷處理,處理后進(jìn)行調(diào)試操作。以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
      ,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明公開的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。·
      權(quán)利要求
      1.一種JAVA卡調(diào)試信息的處理方法,其特征在于,包括 步驟A :獲取指令并檢測(cè)指令類型,如是設(shè)置指令,則執(zhí)行步驟B,如是調(diào)試指令,則執(zhí)行步驟E,如是其他,則根據(jù)指令進(jìn)行操作; 步驟B :按照預(yù)設(shè)規(guī)定對(duì)所述設(shè)置指令進(jìn)行解析得到包頭和數(shù)據(jù)部分,對(duì)所述包頭進(jìn)行解析,從所述設(shè)置指令包頭的解析結(jié)果中獲取請(qǐng)求ID和請(qǐng)求標(biāo)記,判斷所述請(qǐng)求標(biāo)記是否為預(yù)設(shè)值,是則執(zhí)行步驟C,否則給發(fā)送裝置返回提示信息;步驟C :從所述設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令,如所述命令集為事件請(qǐng)求命令集且所述命令對(duì)應(yīng)的事件類型為設(shè)置事件,從所述解析結(jié)果中獲取調(diào)節(jié)器,如是位置調(diào)節(jié)器則根據(jù)位置信息在虛擬機(jī)上運(yùn)行的Java卡程序中查找原字節(jié)碼,并用特殊字節(jié)碼替換所述原字節(jié)碼,將所述原字節(jié)碼寫到事件列表中生成事件序列號(hào),順序執(zhí)行步驟D ;如是單步調(diào)節(jié)器,則設(shè)置單步調(diào)試信息,將事件寫到事件列表中生成事件序列號(hào),順序執(zhí)行步驟D ;如所述命令對(duì)應(yīng)的事件類型為其他事件則根據(jù)設(shè)置指令進(jìn)行操作;如所述命令集為其他命令集則根據(jù)設(shè)置指令進(jìn)行操作; 步驟D :根據(jù)預(yù)設(shè)規(guī)則設(shè)置第一返回?cái)?shù)據(jù),并將所述第一返回?cái)?shù)據(jù)返回給發(fā)送裝置; 步驟E :獲取虛擬機(jī)上當(dāng)前運(yùn)行的Java卡程序的字節(jié)碼,判斷所述讀取的字節(jié)碼是否為特殊字節(jié)碼,是則執(zhí)行步驟F,否則執(zhí)行步驟G ; 步驟F :根據(jù)所述獲取的字節(jié)碼從事件列表中查找對(duì)應(yīng)的原字節(jié)碼并用所述原字節(jié)碼替換所述獲取的字節(jié)碼,從所述虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I ; 步驟G :判斷事件列表中的單步調(diào)試標(biāo)志是否置位,是則步驟H,否則返回步驟E ; 步驟H :根據(jù)所述獲取的字節(jié)碼從所述虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I ; 步驟I :根據(jù)所述預(yù)設(shè)規(guī)則設(shè)置第二返回?cái)?shù)據(jù),并將所述第二返回?cái)?shù)據(jù)返回給發(fā)送裝置。
      2.如權(quán)利要求I所述的方法,其特征在于,所述步驟C和步驟E-步驟H分別替換為步驟C,和步驟E’ -步驟H’ ; 步驟C’ 從所述設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令,如所述命令集為事件請(qǐng)求命令集且所述命令對(duì)應(yīng)的事件類型為設(shè)置事件,從所述解析結(jié)果中獲取調(diào)節(jié)器,如是位置調(diào)節(jié)器則根據(jù)位置信息在虛擬機(jī)上運(yùn)行的Java卡程序中查找原字節(jié)碼,并用特殊字節(jié)碼替換所述原字節(jié)碼,將所述原字節(jié)碼寫到事件列表中生成事件序列號(hào),順序執(zhí)行步驟D ;如是單步調(diào)節(jié)器,則根據(jù)指令中的位置信息在虛擬機(jī)上運(yùn)行的Java卡程序中查找原字節(jié)碼,并用特殊字節(jié)碼替換所述原字節(jié)碼,并從指令中獲取單步調(diào)試信息,將單步事件寫到事件列表中生成事件序列號(hào),順序執(zhí)行步驟D ;如所述命令對(duì)應(yīng)的事件類型為其他事件則根據(jù)設(shè)置指令進(jìn)行操作;如所述命令集為其他命令集則根據(jù)設(shè)置指令進(jìn)行操作; 步驟E’ 對(duì)調(diào)試指令進(jìn)行解析并從解析結(jié)果中獲取字節(jié)碼,判斷所述獲取的字節(jié)碼是否為特殊字節(jié)碼,是則執(zhí)行步驟F’,否則結(jié)束本次操作,等待虛擬機(jī)下發(fā)指令; 步驟F’ 判斷事件列表中的單步調(diào)試標(biāo)志是否置位,是則步驟G’,否則返回步驟H’ ; 步驟G’ 根據(jù)所述獲取的字節(jié)碼從所述虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I ; 步驟H’ 根據(jù)特殊字節(jié)碼從事件列表中查找對(duì)應(yīng)的原字節(jié)碼并用所述原字節(jié)碼替換所述特殊字節(jié)碼,從所述虛擬機(jī)中的調(diào)試數(shù)據(jù)中獲取返回?cái)?shù)據(jù),順序執(zhí)行步驟I。
      3.如權(quán)利要求I所述的方法,其特征在于,所述步驟C替換為步驟C”; 步驟C” 從所述設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令,如所述命令集為事件請(qǐng)求命令集且所述命令對(duì)應(yīng)的事件類型為設(shè)置事件,從所述解析結(jié)果中獲取調(diào)節(jié)器,如是位置調(diào)節(jié)器則根據(jù)指令中的斷點(diǎn)位置信息從調(diào)試數(shù)據(jù)中讀取對(duì)應(yīng)的原字節(jié)碼并保存,用特殊字節(jié)碼代替所述原字節(jié)碼;將所述斷點(diǎn)位置信息事件種類一起添加到斷點(diǎn)列表中,在事件列表中添加出棧事件生成事件序列號(hào);如是單步調(diào)節(jié)器,則設(shè)置單步調(diào)試信息,將事件寫到事件列表中生成事件序列號(hào);如所述命令對(duì)應(yīng)的事件類型為其他事件則根據(jù)設(shè)置指令執(zhí)行操作;如所述命令集為其他命令集則根據(jù)設(shè)置指令執(zhí)行操作。
      4.如權(quán)利要求1-3任意一項(xiàng)所述的方法,其特征在于,所述步驟A中通過(guò)指令格式檢測(cè)指令類型,具體包括如所述指令的格式符合第一預(yù)設(shè)格式則為設(shè)置指令,如所述指令的格式符合APDU格式則為調(diào)試指令。
      5.如權(quán)利要求1-3任意一項(xiàng)所述的方法,其特征在于,所述步驟A中獲取指令包括從命令緩存中獲取指令或接收所述發(fā)送裝置發(fā)送的指令。
      6.如權(quán)利要求1-3任意一項(xiàng)所述的方法,其特征在于,在判斷所述請(qǐng)求標(biāo)記是否為預(yù)設(shè)值之前包括 從所述設(shè)置指令包頭的解析結(jié)果中獲取指令長(zhǎng)度,根據(jù)所述指令長(zhǎng)度判斷所述設(shè)置指令是否完整,如完整則判斷所述設(shè)置指令是否為未處理指令,是則繼續(xù),否則結(jié)束,如不完整則結(jié)束。
      7.如權(quán)利要求6所述的方法,其特征在于,所述根據(jù)所述指令長(zhǎng)度判斷所述設(shè)置指令是否完整,具體為 所述判斷所述設(shè)置指令所占字節(jié)是否與所述指令長(zhǎng)度相符,是則所述設(shè)置指令完整,否則所述設(shè)置指令不完整。
      8.如權(quán)利要求7所述的方法,其特征在于,所述判斷所述請(qǐng)求標(biāo)記是否為預(yù)設(shè)值,包括判斷所述獲取的請(qǐng)求標(biāo)記是否為0x00,是則執(zhí)行步驟E,否則給發(fā)送裝置返回提示信肩、O
      9.如權(quán)利要求7所述的方法,其特征在于,所述給發(fā)送裝置返回提示信息,具體包括從所述設(shè)置指令的請(qǐng)求標(biāo)記之后讀取兩字節(jié)的數(shù)據(jù),并將所述讀取的數(shù)據(jù)返回給發(fā)送裝置。
      10.如權(quán)利要求9所述的方法,其特征在于,所述步驟C具體包括 步驟Cl:從所述設(shè)置指令包頭的解析結(jié)果中獲取命令集和命令,并檢測(cè)所述命令集的類型,如是事件請(qǐng)求命令集,則執(zhí)行步驟C2,否則根據(jù)其他命令集進(jìn)行操作; 步驟C2 :判斷所述命令對(duì)應(yīng)的事件類型,如是清除單個(gè)斷點(diǎn)事件,則執(zhí)行步驟C3 ;如是清除所有斷點(diǎn)事件,則執(zhí)行步驟C5 ;如是設(shè)置事件,則執(zhí)行步驟CS ; 步驟C3 :對(duì)所述設(shè)置指令的數(shù)據(jù)部分進(jìn)行解析,從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取事件種類和事件請(qǐng)求ID,并根據(jù)所述事件種類和所述事件請(qǐng)求ID在事件列表中查找對(duì)應(yīng)的事件,判斷是否找到匹配的事件,是則執(zhí)行步驟C4,否則給發(fā)送裝置返回未找到匹配事件的信息; 步驟C4 :結(jié)束當(dāng)前操作清空所述響應(yīng)緩存中的數(shù)據(jù);步驟C5 :在所述事件列表中查找所有斷點(diǎn)事件; 步驟C6 :清空所述事件列表中的所有斷點(diǎn)事件,并判斷是否清空完成,是則執(zhí)行步驟C7,否則給發(fā)送裝置返回錯(cuò)誤信息; 步驟C7 :清空所述響應(yīng)緩存中的數(shù)據(jù)并結(jié)束當(dāng)前操作; 步驟CS :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取事件種類和暫停政策; 步驟C9 :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取調(diào)節(jié)器個(gè)數(shù),根據(jù)所述調(diào)節(jié)器個(gè)數(shù)分配事件處理需要的緩存; 步驟ClO :判斷所述調(diào)節(jié)器個(gè)數(shù)是否為0,是則給所述發(fā)送裝置返回錯(cuò)誤信息,否則執(zhí)行步驟Cll ; 步驟Cll :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取調(diào)節(jié)器的種類,如是位置調(diào)節(jié)器,則進(jìn)行設(shè)置斷點(diǎn)操作;如是單步調(diào)節(jié)器,則進(jìn)行設(shè)置單步操作;如是其他調(diào)節(jié)器,則進(jìn)行其他調(diào)節(jié)器的操作;如不是調(diào)節(jié)器,則給發(fā)送裝置返回錯(cuò)誤信息。
      11.如權(quán)利要求10所述的方法,其特征在于,所述步驟Cl中檢測(cè)所述命令集的類型具體包括判斷所述獲取的命令集的值是否為15,是則為事件請(qǐng)求命令集,否則為其他命令集。
      12.如權(quán)利要求10所述的方法,其特征在于,所述步驟C2具體包括檢測(cè)所述獲取的命令所對(duì)應(yīng)的值,如是01則事件類型為設(shè)置事件,如是02則事件類型為清除事件,如是03則事件類型為清除所有斷點(diǎn)事件。
      13.如權(quán)利要求10所述的方法,其特征在于,所述步驟Cll中判斷調(diào)節(jié)器的種類,具體包括 檢測(cè)從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中的調(diào)解器個(gè)數(shù)之后獲取的值,如是8則為位置調(diào)節(jié)器,如是12則為單步調(diào)節(jié)器,如獲取的數(shù)據(jù)與預(yù)設(shè)值不符則不是調(diào)節(jié)器。
      14.如權(quán)利要求10所述的方法,其特征在于,所述步驟Cll中的進(jìn)行設(shè)置斷點(diǎn)操作,包括 步驟C12 :從所述設(shè)置指令數(shù)據(jù)部分的的解析結(jié)果中獲取斷點(diǎn)位置信息并進(jìn)行存儲(chǔ),所述斷點(diǎn)位置信息包括引用類型標(biāo)識(shí)、引用類型ID、函數(shù)ID和偏移信息; 步驟C13:根據(jù)所述引用類型標(biāo)識(shí)、引用類型ID、函數(shù)ID和偏移信息在預(yù)先下載到所述虛擬機(jī)中的Java卡程序中查找對(duì)應(yīng)的位置,讀取所述對(duì)應(yīng)位置的原字節(jié)碼并保存,用特定字節(jié)碼替換所述對(duì)應(yīng)位置的原字節(jié)碼; 步驟C14:將斷點(diǎn)信息和所述事件種類一起添加到斷點(diǎn)列表中,所述斷點(diǎn)信息包括所述原字節(jié)碼和斷點(diǎn)位置信息; 步驟C15:將事件寫入到事件列表中生成事件序列號(hào),將所述事件序列號(hào)寫入到所述響應(yīng)緩存的第一預(yù)設(shè)位置。
      15.如權(quán)利要求14所述的方法,其特征在于,所述步驟Cll中的進(jìn)行設(shè)置單步操作,包括 步驟C16 :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取虛擬機(jī)線程ID、應(yīng)用程序的單步指令方式和單步調(diào)試方式; 步驟C17 :判斷所述單步指令方式是否為第一指令方式或所述單步調(diào)試方式是否為單步進(jìn)入,是則執(zhí)行步驟C21,否則執(zhí)行步驟C18 ;步驟C18 :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取當(dāng)前運(yùn)行的Java卡程序行對(duì)應(yīng)的棧信息; 步驟C19 :判斷所述單步指令方式是否為第二指令方式,是則執(zhí)行步驟C20,否則執(zhí)行步驟C21 ; 步驟C20 :從所述設(shè)置指令數(shù)據(jù)部分的解析結(jié)果中獲取與所述棧信息對(duì)應(yīng)的棧標(biāo)號(hào),順序執(zhí)行步驟C21 ; 步驟C21 :判斷所述單步調(diào)試方式是否為單步進(jìn)入,是則執(zhí)行步驟C22,否則執(zhí)行步驟C24 ; 步驟C22 :在所述事件列表中添加棧事件; 步驟C23 :將事件列表中的單步調(diào)試標(biāo)志置位; 步驟C24 :判斷所述設(shè)置單步操作的處理是否完成,是則執(zhí)行步驟C25,否則給發(fā)送裝置返回錯(cuò)誤信息; 步驟C25 :將所述獲取的虛擬機(jī)線程ID、單步指令方式、單步調(diào)試方式存儲(chǔ)于事件列表中,生成事件序列號(hào)并將所述事件序列號(hào)寫入到響應(yīng)緩存的第一預(yù)設(shè)位置。
      16.如權(quán)利要求15所述的方法,其特征在于,所述步驟C23具體為將事件列表中的單步調(diào)試標(biāo)志的通知模式設(shè)置為I。
      17.如權(quán)利要求15所述的方法,其特征在于,所述步驟D根據(jù)預(yù)設(shè)規(guī)定在響應(yīng)緩存中設(shè)置第一返回?cái)?shù)據(jù),包括 步驟Dl :在所述響應(yīng)緩存的第二預(yù)設(shè)位置寫入與所述請(qǐng)求ID對(duì)應(yīng)的響應(yīng)ID和與所述請(qǐng)求標(biāo)記匹配的響應(yīng)標(biāo)記; 步驟D2 :在所述響應(yīng)緩存的第三預(yù)設(shè)位置寫入兩個(gè)字節(jié)的狀態(tài)碼,并判斷所述狀態(tài)碼是否為O,是則執(zhí)行步驟D3,否則執(zhí)行步驟D4 ; 步驟D3:在所述響應(yīng)緩存的第四預(yù)設(shè)位置寫入操作結(jié)果的實(shí)際數(shù)據(jù)長(zhǎng)度,順序執(zhí)行步驟D5 ; 步驟D4:在所述響應(yīng)緩存的第四預(yù)設(shè)位置寫入返回的最小數(shù)據(jù)長(zhǎng)度,順序執(zhí)行步驟D5 ; 步驟D5 :判斷所述響應(yīng)緩存的第三預(yù)設(shè)位置上的數(shù)據(jù)長(zhǎng)度是否大于O,是則將所述第一返回?cái)?shù)據(jù)返回給發(fā)送裝置,并清空所述響應(yīng)緩存中的第一返回?cái)?shù)據(jù),否則直接清空所述響應(yīng)緩存中的第一返回?cái)?shù)據(jù)。
      18.如權(quán)利要求16所述的方法,其特征在于,所述步驟F具體包括 步驟Fl :根據(jù)所述獲取的字節(jié)碼從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取函數(shù)信息,根據(jù)所述函數(shù)信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取所述字節(jié)碼的偏移信息; 步驟F2 :根據(jù)所述函數(shù)信息和所述偏移信息在斷點(diǎn)列表中查找對(duì)應(yīng)的斷點(diǎn)信息,如找到則執(zhí)行步驟F3,如未找到則返回步驟E ; 步驟F3 :從所述斷點(diǎn)信息中讀取與所述特殊字節(jié)碼對(duì)應(yīng)的原字節(jié)碼; 步驟F4 :根據(jù)所述函數(shù)信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取類信息,根據(jù)所述類信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取類型標(biāo)識(shí),根據(jù)所述類型標(biāo)識(shí)從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中讀取相應(yīng)的簽名信息,根據(jù)所述簽名信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的返回?cái)?shù)據(jù);步驟F5 :用所述原字節(jié)碼替換所述虛擬機(jī)上當(dāng)前運(yùn)行的Java卡程序中的所述特殊字節(jié)碼。
      19.如權(quán)利要求18所述的方法,其特征在于,所述步驟F2具體包括 在所述斷點(diǎn)列表中的斷點(diǎn)信息中查找是否有與所述函數(shù)信息和所述特殊字節(jié)碼相對(duì)應(yīng)的原字節(jié)碼,是則執(zhí)行步驟F3,否則給所述發(fā)送裝置返回錯(cuò)誤信息。
      20.如權(quán)利要求17所述的方法,其特征在于,所述步驟H具體包括 根據(jù)所述讀取的字節(jié)碼從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中讀取行信息,根據(jù)所述行信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取函數(shù)信息,根據(jù)所述函數(shù)信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取類信息,根據(jù)所述類信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取引用類型標(biāo)識(shí),根據(jù)所述引用類型標(biāo)識(shí)從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取相應(yīng)的簽名信息,根據(jù)所述簽名信息從所述虛擬機(jī)上的調(diào)試數(shù)據(jù)中獲取對(duì)應(yīng)的返回?cái)?shù)據(jù)。
      21.如權(quán)利要求I所述的方法,其特征在于,所述步驟G具體包括判斷事件列表中的單步調(diào)試標(biāo)志的通知模式是否為1,是則置位,否則未置位。
      全文摘要
      本發(fā)明公開一種JAVA卡調(diào)試信息的處理方法,包括獲取指令并檢測(cè)指令類型,如是未處理過(guò)的設(shè)置指令,如調(diào)節(jié)器是位置調(diào)節(jié)器則用特殊字節(jié)碼替換在虛擬機(jī)上運(yùn)行的Java卡程序中的與位置信息相符的原字節(jié)碼,將原字節(jié)碼寫到事件列表中生成事件序列號(hào);如是單步調(diào)節(jié)器,則設(shè)置單步調(diào)試信息,將事件寫到事件列表中生成事件序列號(hào);如是調(diào)試指令,則獲取虛擬機(jī)上當(dāng)前運(yùn)行的Java卡程序的字節(jié)碼并判斷其是否為特殊字節(jié)碼,是則從事件列表中查找對(duì)應(yīng)的原字節(jié)碼并用原字節(jié)碼替換特殊字節(jié)碼,獲取返回?cái)?shù)據(jù),否則當(dāng)判斷事件列表中的單步調(diào)試標(biāo)志置位時(shí),根據(jù)獲取的字節(jié)碼獲取返回?cái)?shù)據(jù)。本發(fā)明使用方便、可實(shí)時(shí)監(jiān)控和查看虛擬機(jī)調(diào)試過(guò)程。
      文檔編號(hào)G06F11/36GK102855186SQ20121025865
      公開日2013年1月2日 申請(qǐng)日期2012年7月24日 優(yōu)先權(quán)日2012年7月24日
      發(fā)明者陸舟, 于華章 申請(qǐng)人:飛天誠(chéng)信科技股份有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1