Collus

          惜秦懷古

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            0 Posts :: 6 Stories :: 0 Comments :: 0 Trackbacks
          非常強烈的推薦下BTrace這個工具,用了后不得不說太強大了,BTrace簡單來說,就是能在不改動當前程序的情況下,運行時的去監(jiān)控Java程序的 執(zhí)行狀況,例如可以做到內(nèi)存狀況的監(jiān)控、方法調(diào)用的監(jiān)控等等,官方網(wǎng)站上有非常多詳細的例子,我不說太多,只在下面舉一個簡單的例子來說明它的作 用,BTrace的User Guide請見:http://kenai.com/projects/btrace/pages/UserGuide
          對于運行中的Java程序,尤其是出了問題的程序,會需要跟蹤其執(zhí)行狀況,例如傳入的參數(shù)是什么、執(zhí)行了多少時間,返回的對象是什么,拋出了什么異常,傳 統(tǒng)的做法只能是把程序改一遍,加上一堆log,一個例子來展示下用BTrace的情況下,怎么來跟蹤一個方法的執(zhí)行時間:

          @BTrace?public?class?MethodResponseTime?{
          ????
          ????@TLS?
          private?static?long?startTime;
          ????
          ????@OnMethod(clazz
          ="類名",method="方法名")
          ????
          public?static?void?onCall(){
          ????????println(
          "enter?this?method");
          ????????startTime
          =timeMillis();
          ????}
          ????
          ????@OnMethod(clazz
          ="類名",method="方法名",location=@Location(Kind.RETURN))
          ????
          public?static?void?onReturn(){
          ????????println(
          "method?end!");
          ????????println(strcat(
          "Time?taken?ms",str(timeMillis()-startTime)));
          ????}
          ????
          }
          用btrace執(zhí)行上面的代碼,就可以動態(tài)的監(jiān)控任意的目前運行的Java程序中某類的某方法的執(zhí)行時間,執(zhí)行上面代碼的方式如下(jdk 6+):
          btrace [pid] MethodResponseTime.class

          還有例如獲取調(diào)用參數(shù)、調(diào)用者的對象實例以及返回值等請參看User Guide。

          btrace為了保持JVM運行的安全性,因此做了很多的限制,例如不能拋出異常、修改傳入的參數(shù)的值、修改返回值等,基本是一個只讀的動態(tài)分析代碼運行 狀況的工具,但仍然是非常的有用,其實現(xiàn)機制是attach api + asm + ?instrumentation。
          posted on 2010-05-13 13:00 良帥 閱讀(414) 評論(0)  編輯  收藏 所屬分類: JAVA

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 曲沃县| 易门县| 闵行区| 濉溪县| 收藏| 炎陵县| 徐汇区| 罗田县| 嘉峪关市| 浦城县| 特克斯县| 枣强县| 泰顺县| 常德市| 罗山县| 栖霞市| 通江县| 金溪县| 庄河市| 高清| 岑巩县| 临邑县| 博爱县| 宁南县| 阿拉善盟| 磴口县| 增城市| 福安市| 乌兰察布市| 武隆县| 宜兰县| 阿图什市| 茌平县| 柳江县| 阳新县| 通辽市| 松江区| 阜南县| 海阳市| 三穗县| 聂荣县|