国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

在eclipse中進行HotSpot的源碼調(diào)試

2019-11-15 00:05:22
字體:
供稿:網(wǎng)友
在eclipse中進行HotSpot的源碼調(diào)試

本文地址:http://m.survivalescaperooms.com/myresearch/p/ide-buildhotspot.html,轉(zhuǎn)載請注明源地址。

在閱讀OpenJDK源碼的過程中,經(jīng)常需要運行、調(diào)試程序來幫助理解。我們現(xiàn)在已經(jīng)可以編譯出一個調(diào)試版本HotSpot虛擬機,禁用優(yōu)化,并帶有符號信息,這樣就可以使用GDB來進行調(diào)試了。許多對虛擬機了解比較深的開發(fā)人員確實就是直接使用GDB加VIM編輯器來開發(fā)、修改HotSpot的,不過相信大部分讀者更傾向于在IDE環(huán)境而不是純文本的GDB下閱讀、跟蹤HotSpot源碼,在上篇文章中已經(jīng)介紹過如何在CentOS6.5上編譯OpenJDK7源碼,現(xiàn)繼續(xù)介紹如何在linux下搭建基于eclipse的Hotspot源碼調(diào)試環(huán)境。

軟件環(huán)境
  • OS:CentOS 6.5

  • JDK Version:openjdk-7u6-fcs-src-b24-28_aug_2012

  • IDE:eclipse-cpp-kepler-SR2-linux-gtk-x86_64

下載eclipse,地址: http://www.eclipse.org/cdt/downloads.php,注意eclipse 支持 C/C++的版本。

我下載的是eclipse-cpp-kepler-SR2-linux-gtk-x86_64.tar.gz

具體操作

Step 1:首先解壓JDK源碼包,啟動eclipse,依次選擇File>New>Makefile PRoject with Existing Code

接著出現(xiàn)下面的界面:

Step 2:定位到項目名右鍵>Properties>C/C++ Build需要修改兩個地方:

  • 將Builder里口Use default build command的對勾去掉,填入?yún)?shù)ARCH_DATA_MODEL=64

  • 將Build location的Build directory追加上/make,最終是${workspace_loc:/hotspot}/make,目的是告訴make編譯器到該目錄下尋找編譯文件Makefile。

Step 3:選擇菜單欄Project>Build Project,看到已經(jīng)開始build了,午休一下吧(首次build大概需要10-20m)。

部分LOG信息:

……

INFO: ENABLE_FULL_DEBUG_SYMBOLS=1INFO: /usr/bin/objcopy cmd found so will create .debuginfo files.INFO: STRIP_POLICY=min_stripINFO: ZIP_DEBUGINFO_FILES=1make[1]: Entering directory `/home/jvm/opt/openjdk/hotspot/make'make[1]: Nothing to be done for `generic_export'.make[1]: Leaving directory `/home/jvm/opt/openjdk/hotspot/make'

02:01:39 Build Finished (took 23s.540ms)

Step 4:編譯成功之后就可以測試了,需配置如下幾步:

  • 點選菜單欄Run>Debug Configurations>New launch configuration,在C/C++ application里填入/home/jvm/opt/openjdk/hotspot/build/linux/linux_amd64_compiler2/fastdebug/gamma

  • Project選擇當(dāng)前項目。

  • 在Argument tab頁里Program arguments填入-version

  • 在Environment tab頁里Environment variables to set填入java_HOME|/application/java/jdk

  • 在Common tab頁里勾選Debug

配置完畢后,點擊Debug即可進入調(diào)試模式

由于HotSpot的源碼比較長,C/C++文件數(shù)量也很多,為了便于閱讀,代碼清單給出了各個目錄中代碼的主要用途,供參考。

代碼清單 HotSpot源碼結(jié)構(gòu)hotspot├─agent Serviceability Agent的實現(xiàn)├─make 用來build出HotSpot的各種配置文件├─src HotSpot VM的源代碼│ ├─cpu CPU相關(guān)代碼│ ├─os 操作系相關(guān)代碼│ ├─os_cpu 操作系統(tǒng)+CPU組合的相關(guān)代碼│ └─share 平臺無關(guān)的共通代碼│ ├─tools 工具│ │ ├─hsdis 反匯編插件│ │ ├─IdealGraphVisualizer 將Server編譯器的中間代碼可視化的工具│ │ ├─launcher 啟動程序"java"│ │ ├─LogCompilation 將-XX:+LogCompilation輸出的日志(hotspot.log)整理成更容易閱讀的格式的工具│ │ └─ProjectCreator 生成Visual Studio的project文件的工具│ └─vm HotSpot VM的核心代碼│ ├─adlc 平臺描述文件(上面的cpu或os_cpu里的*.ad文件)的編譯器│ ├─asm 匯編器接口│ ├─c1 Client編譯器│ ├─ci 動態(tài)編譯器的公共服務(wù)/接口│ ├─classfile 類文件的處理(包括類加載和系統(tǒng)符號表等)│ ├─code 動態(tài)生成的代碼的管理│ ├─compiler 編譯器接口│ ├─gc_implementation GC的實現(xiàn)│ │ ├─concurrentMarkSweep Concurrent Mark Sweep GC的實現(xiàn)│ │ ├─g1 Garbage-First GC的實現(xiàn)(不使用老的分代式GC框架)│ │ ├─parallelScavenge ParallelScavenge GC的實現(xiàn)(Server VM默認,不使用老的分代式GC框架)│ │ ├─parNew ParNew GC的實現(xiàn)│ │ └─shared GC的共通實現(xiàn)│ ├─gc_interface GC的接口│ ├─interpreter 解釋器,包括"參考資料

《深入java虛擬機》


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 且末县| 开江县| 乌鲁木齐市| 湘乡市| 湘阴县| 和林格尔县| 长武县| 珲春市| 岚皋县| 延长县| 屯留县| 莱芜市| 格尔木市| 河津市| 兴安盟| 呼玛县| 大方县| 内江市| 德庆县| 卓资县| 名山县| 黄山市| 建始县| 高州市| 体育| 吴忠市| 罗平县| 赞皇县| 吉安县| 中阳县| 乌海市| 奉新县| 大埔区| 宜宾县| 监利县| 闸北区| 永顺县| 阳江市| 侯马市| 凤台县| 吴桥县|