隨筆-8  評論-31  文章-0  trackbacks-0
          那是2007年三月二日,我發了<定位Java類中的每個方法在類文件中的位置>
          引起了幾個大蝦的注意并且給我指點,當時看了以后也沒有怎么弄,也不知道怎么弄.

          這是cape給我的建議:

          最直接的辦法應該是分析class的bytecode,找到每個Method_info->Code Attribute->LineNumberTable Attribute

          今天空閑得慌而是我拿這個method linenumber幾個keyword在網上狂搜了一把,
          http://www.ibm.com/developerworks/cn/java/j-dyn0302/index.html

          得到美文一篇,用Javassist來做. Javassist是一個專門操控java class的bytecode的類,可以動態的改變其狀態,我沒有深究它到底有多大的能耐,有興趣可以去它的官方網站看看,

          http://www.csg.is.titech.ac.jp/~chiba/javassist/

          但是它確實可以象cape指點的那樣,讓我實現對java類中的每個方法的定位(得到類中的某個方法的lineRange)

          而是我就隨便翻了幾個例子以后根據在線文檔寫了不到100行代碼輕松搞定。:) 我高興啊。

          干這個事情的兩個java的source code可以從這里得到:

          http://www.aygfsteel.com/Files/xmp123/MethodParser.zip

          代碼很簡單,我就不解釋代碼了。

          這是示例結果:
          ------------------------------------------------------------------------------------------------------------------------------
          Analyzing net.blogjava.xmp123.MyMethodInfo ...
          net.blogjava.xmp123.MyMethodInfo.getLineList() locate between 56 and 56

          net.blogjava.xmp123.MyMethodInfo.updateLineList() locate between 63 and 80

          net.blogjava.xmp123.MyMethodInfo.addLineToLineList(int) locate between 87 and 89

          net.blogjava.xmp123.MyMethodInfo.setLineList(java.util.List) locate between 95 and 97
          ...
          ------------------------------------------------------------------------------------------------------------------------------

          希望這東西有用......
          posted on 2007-08-15 17:56 自己的小屋 閱讀(1142) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 安庆市| 丽水市| 贵阳市| 安西县| 尉氏县| 稻城县| 丁青县| 高邑县| 博兴县| 阳东县| 锦屏县| 德庆县| 清丰县| 广汉市| 鹤山市| 修水县| 大城县| 林周县| 姜堰市| 广汉市| 盘山县| 辰溪县| 乃东县| 扶绥县| 潢川县| 凌云县| 区。| 张北县| 绵阳市| 鲜城| 菏泽市| 原阳县| 兴和县| 阳城县| 盐池县| 龙里县| 咸宁市| 商都县| 新和县| 河东区| 历史|