隨筆-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 自己的小屋 閱讀(1147) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 通化市| 左贡县| 海丰县| 洞头县| 临武县| 大悟县| 鞍山市| 兴文县| 西乌| 临桂县| 额尔古纳市| 绥芬河市| 嘉义县| 徐汇区| 永康市| 盐城市| 扶沟县| 南通市| 桦南县| 响水县| 稷山县| 高雄县| 桂东县| 高安市| 宁晋县| 裕民县| 惠东县| 康保县| 浏阳市| 阳曲县| 蒲江县| 凌海市| 开平市| 寿阳县| 商丘市| 临夏市| 务川| 浙江省| 那曲县| 景东| 五原县|