你這說的太籠統(tǒng)了,應(yīng)該具體些。
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供涇縣企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為涇縣眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。
有了Java代碼之后
1、可以在代碼中寫些測試的方法,把你想要驗證的東西,輸出看一下。
2、可以用Debug的形式,跟蹤代碼執(zhí)行,驗證程序的邏輯是否正確。
3、利用JUnit寫斷言,測試結(jié)果
很簡單,單元測試啊!引入包 import org.junit.Test;
比如下面這個測試函數(shù),不是main函數(shù),但是你可以執(zhí)行它并測試輸出。注意要有@標識,這是注釋,必要的。還有就是可以打斷點??!斷點就是執(zhí)行停止的地方,可以是程序某個模塊,某個變量值等。
@Test
public void selectUserByID() {
// 得到SqlSession實例,便于執(zhí)行增刪改查、事務(wù)提交回滾等操作。
SqlSession session = getSqlSessionFactory().openSession();
try {
userPOJO user = (userPOJO) session.selectOne("mapper.userPOJO.selectByName", 2);
System.out.println(user);
} finally {
session.close();
}
}
Arthas 是Alibaba開源的Java診斷工具。當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:
這個類從哪個 jar 包加載的?為什么會報各種類相關(guān)的 Exception?
我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯了?
遇到問題無法在線上 debug,難道只能通過加日志再重新發(fā)布嗎?
線上遇到某個用戶的數(shù)據(jù)處理有問題,但線上同樣無法 debug,線下無法重現(xiàn)!
是否有一個全局視角來查看系統(tǒng)的運行狀況?
有什么辦法可以監(jiān)控到JVM的實時運行狀態(tài)?
怎么快速定位應(yīng)用的熱點,生成火焰圖?
Arthas支持jdk6+,多種系統(tǒng)版本,采用命令行交互模式,同時提供豐富的tab自動補全功能,進一步方便我們進行問題的定位和診斷
1.2、快速安裝
1.2.1、Linux下按
下載arthas-boot.jar,在使用java -jar方式啟動即可。
命令
**注意:**在進行第二條命令之前,先運行一個Java程序在內(nèi)存之中,否則會報錯
2、快速入門
2.1、attach一個進程
目標:
1、執(zhí)行一個jar包
2、通過arthas來attach來追蹤
3、進行常用的命令操作
如果端口號被占用,也可以通過命令換成另一個端口號執(zhí)行。
總結(jié):
1、啟動進程
2、啟動arthas-boot.jar,進入啟動的進程
3、不但可以通過命令行的方式來操作arthas也可以通過瀏覽器來訪問arthas
2.2、常用命令接觸
1、dashboard儀表板
2、通過thread命令來獲取到arthas-demo進程的Main Class
3、通過jad來反編譯Main Clas
4、wathch具體方法
2.2.1.、dashboard儀表板
在這里插入圖片描述
2.2.2、通過thread命令來獲取到arthas-demo進程的Main Class
在這里插入圖片描述
2.2.3、通過jad反編譯Main Class
在這里插入圖片描述
2.2.4、watch監(jiān)視
demo.MathGame primeFactors:
demo.MathGame:包名+類名
primeFactors:方法名
returnObj:返回參數(shù)的表達式
2.2.5、退出arthas
如果只是退出當前的連接,可以用quit或者exit命令。Attach到目標進程上的arthas還會繼續(xù)運行,端口會保持開放,下次連接時可以直接連接上。
如果想完全退出arthas,可以執(zhí)行stop命令
在這里插入圖片描述
2.3、基礎(chǔ)命令1
1、help:查看所有幫助信息
2、cat:顯示文本文件內(nèi)容
3、grep:匹配查找,和linux中的grep類似,但只能用于管道命令
在這里插入圖片描述
4、pwd:顯示當先目錄的目錄地址
5、cls:清屏
2.4、基礎(chǔ)命令2
1、session:查看當前會話信息
在這里插入圖片描述
2、reset:重置增強類,將被arthas增強過的類全部還原,arthas服務(wù)端關(guān)閉時會重置所有增強過的類
在這里插入圖片描述
在這里插入圖片描述
3、version:輸出當前目標Java進程所加載 的Arthas版本號
4、quit:退出當前Arthas客戶端,其他Arthas客戶端不受影響。
5、stop:關(guān)閉Arthas服務(wù)端,所有Arthas客戶端全部退出。
6、keymap:Arthas快捷鍵列表及自定義快捷鍵
7、history:和linux系統(tǒng)作用一樣 打印命令歷史
3、JVM相關(guān)命令
1、dashboard
在這里插入圖片描述
2、thread 線程相關(guān):查看當前jvm的線程堆棧的信息
在這里插入圖片描述
3、jvm 虛擬機相關(guān)
4、sysprop 系統(tǒng)屬性相關(guān)
5、sysenv:查看當前jvm的環(huán)境屬性
在這里插入圖片描述
6、vmoption:查看、更新vm診斷相關(guān)的參數(shù)
7、getstatic:方便的查看類的靜態(tài)屬性
語法:getstatic 類名 屬性名
8、ognl
在這里插入圖片描述
3.1、反編譯 jad
比如編譯string類
–source-only : 只顯示源碼
只反編譯指定的方法
xx 就是方法名
3.2、內(nèi)存編譯mc
內(nèi)存編譯器,編譯.java文件生成.class
在這里插入圖片描述
在這里插入圖片描述
4、Arthas進階
4.1、目標
類與類加載器
monitor、watch、trace、stack等核心命令的使用
火焰圖的生存
arthas實戰(zhàn)案例
4.2、dump
將已加載的字節(jié)碼文件保存到特定的目錄下,logs/arthas/classdump/
在這里插入圖片描述
舉例:
在這里插入圖片描述
4.3、classloader
獲取類加載器的信息
作用:
將jvm中所有的classloader的信息統(tǒng)計出來,并可以展示繼承樹,urls等。
讓指定的classloader去getResources,打印出所有查找到的resources的url。
在這里插入圖片描述
4.4、monitor
監(jiān)控指定類中方法的執(zhí)行情況
作用:
在這里插入圖片描述
在這里插入圖片描述
4.5、watch(重要)
觀察到指定方法的調(diào)用情況
作用:
方法執(zhí)行數(shù)據(jù)觀測,方便觀測到指定方法的調(diào)用情況
能觀察到的范圍:返回值、拋出異常、入?yún)ⅰMㄟ^編寫OGNL表達式進行對應(yīng)變量的查看
在這里插入圖片描述
在這里插入圖片描述
只查看第一個參數(shù)小于0的情況
在這里插入圖片描述
文章知識點與官方知識檔案匹配
Java技能樹首頁概覽
89145 人正在系統(tǒng)學習中
打開CSDN,閱讀體驗更佳
java應(yīng)用線上診斷神器--Arthas_linyb極客之路的博客
c、保存好/tmp/UserServiceImpl.java之后,使用mc(Memory Compiler)命令來編譯,并且通過–classLoaderClass參數(shù)指定ClassLoader mc--classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader/tmp/UserServiceImpl.java-d/tmp ...
繼續(xù)訪問
java線上診斷工具,Java線上診斷神器Arthas-1_Skogkatt的博客-CSDN...
Arthas 是Alibaba 開源的一款線上診斷工具,相比Java 自帶的jinfo, jmap,jstat 等工具更方便(起碼不用記那么多參數(shù)),而且利用字節(jié)碼增強技術(shù),可以很好的對線上的問題進行定位以及解決,不用再為生產(chǎn)或者測試環(huán)境無法debug而感到無能為力。...
繼續(xù)訪問
最新發(fā)布 Arthas常用命令
arthas指令大全
繼續(xù)訪問
Arthas在線java進程診斷工具 在線調(diào)試神器
Arthas在線java進程診斷工具 在線調(diào)試神器 tag: java 診斷 堆棧 在線調(diào)試 耗時 死鎖 arthas 阿里巴巴 Arthas 是 Alibaba 開源的Java診斷工具,深受開發(fā)者喜愛。 官網(wǎng)文檔: 當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決: 這個類從哪個 jar 包加載的?為什么會報各種類相關(guān)的 Exception? 我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯了? 遇到問題無法在.
繼續(xù)訪問
Java在線診斷利器之Arthas_Java老K的博客
Arthas是阿里在2019年9月份開源的一款java在線診斷工具,能夠分析、診斷、定位java應(yīng)用問題,例如:jvm信息、線程信息、搜索類中的方法、 跟蹤代碼執(zhí)行、觀測方法的入?yún)⒑头祷貐?shù)等等。 Arthas最大的特點是能在不修改代碼和不需要重新發(fā)布的...
繼續(xù)訪問
java線上診斷神器 --Arthas__小魚塘的博客_java網(wǎng)絡(luò)診斷
java線上診斷神器 --Arthas 最近在工作中用到的一個非常很好的線上診斷,分析問題的神器,再次記錄一下: 官方文檔:簡介 | arthas GitHub 地址:GitHub - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java診斷利器Arthas...
繼續(xù)訪問
Arthas使用教程(8大分類)
1、基礎(chǔ)命令。2、JVM相關(guān)。3、類與類加載器。4、option全局選項。5、項目中使用案例。
繼續(xù)訪問
Arthas介紹
這篇文章為大家推薦一個為Java應(yīng)用程序排查問題的非常好用的工具:Arthas,首先聲明一下,這邊文章并不是教大家如何使用,它只是一個搬運工,在Arthas的github上已經(jīng)有非常詳細的使用教程了。 Arthas(阿爾薩斯)是阿里巴巴開源的Java診斷工具,深受開發(fā)者喜愛 當你遇到以下類似問題而束手無策時,Arthas統(tǒng)統(tǒng)可以幫你解決 某個類是從哪個jar包加載的,為什么會報各種類相關(guān)的Exc...
繼續(xù)訪問
Arthas - Java線上診斷工具_是良辰的博客
java -jar arthas-boot.jar 啟動之后就可以看到一個java程序列表,像我這就是只有一個java程序在跑,就是當前根目錄下面的app.jar 選擇1,即可對app.jar進行監(jiān)控診斷。 PS:如果是虛擬機,直接在應(yīng)用服務(wù)器上面執(zhí)行上面的命令,如果是docke...
繼續(xù)訪問
java線上診斷工具Arthas-實戰(zhàn)案例_小姐姐修燈泡嗎的博客
首先我就來簡單介紹下他的作用:(粘貼官網(wǎng))Arthas 是Alibaba開源的Java診斷工具,深受開發(fā)者喜愛。在線排查問題,無需重啟;動態(tài)跟蹤Java代碼;實時監(jiān)控JVM狀態(tài)。 Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同時提供豐富的...
繼續(xù)訪問
arthas 使用教程
arthas安裝使用 首先是安裝,說白了其實把他當成一個工具來用就行了,你什么服務(wù)需要在線進行性能情況的一個監(jiān)測和性能的瓶頸排查。第三步啟動arthas-boot.jar,啟動的時候要注意你需要監(jiān)測的java是啟動的可以用jps-l命令查看你的java服務(wù)。第二步把jar包上傳到你需要進行java性能監(jiān)測的服務(wù)器上。線上正式環(huán)境把他當成一個排查慢問題的工具還是很好用的。以上就是啟動服務(wù)了下面開始介紹常用的一些排查命令。...
繼續(xù)訪問
Arthas
Arthas.md 當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決: 這個類從哪個 jar 包加載的?為什么會報各種類相關(guān)的 Exception? 我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯了? 遇到問題無法在線上 debug,難道只能通過加日志再重新發(fā)布嗎? 線上遇到某個用戶的數(shù)據(jù)處理有問題,...
繼續(xù)訪問
Java線上問題診斷工具Arthas_星光Starsray的博客
java -jar arthas-boot.jar //啟動 當看到控制臺出現(xiàn)arthas的標志,表明啟動成功!注意此時已經(jīng)進入控制臺,主要是arthas的命令使用。 [root@xxptweb01 arthas]# java -jar arthas-boot.jar
繼續(xù)訪問
【Java】性能問題診斷利器Arthas --常用命令示例_嘆了口丶氣的博客-C...
Arthas 是一款阿里開源的 Java 線上診斷工具,功能強大,可以在不修改代碼或者重啟服務(wù)的情況下快速定位線上問題。 官方文檔:Arthas官網(wǎng) 二、安裝 從官網(wǎng)下載 Arthas 全量包安裝(因為快速安裝可能因網(wǎng)絡(luò)原因下載失敗),然后用 java -jar 方...
繼續(xù)訪問
Java診斷工具Arthas使用說明
Arthas 是Alibaba開源的Java診斷工具,Arthas支持JDK 6+,支持Linux/Mac/Windows,支持命令行交互模式、 Tab 自動補全功能,方便進行問題的定位和診斷。
繼續(xù)訪問
JVM性能調(diào)優(yōu)篇07-阿里巴巴Arthas工具詳解
阿里巴巴Arthas工具詳解
繼續(xù)訪問
Arthas 是Alibaba開源的Java診斷工具
Arthas是Alibaba開源的Java診斷工具,深受開發(fā)者喜愛。 當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決: 這個類從哪個 jar 包加載的?為什么會報各種類相關(guān)的 Exception? 我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯了? 遇到問題無法在線上 debug,難道只能通過加日志再重新發(fā)布嗎? 線上遇到某個用戶的數(shù)據(jù)處理有問題,但線上同樣無法 debug,線下無法重現(xiàn)! 是否有一個全局視角來查看系統(tǒng)的運行...
繼續(xù)訪問
JVM之GC 調(diào)優(yōu)工具 Arthas 實戰(zhàn)使用(二)
Arthas 是 Alibaba 開源的 Java 診斷工具,深受開發(fā)者喜愛。Arthas 支持 JDK 6以上版本,支持 Linux/Mac/Windows,而且這些環(huán)境的命令都一樣,采用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進行問題的定位和診斷 官方文檔參考 一、下載和安裝 不需要安裝,就是一個 jar 包 curl -O
繼續(xù)訪問
Arthas詳解
文章目錄概述安裝快速安裝使用`arthas-boot`(官網(wǎng)推薦)使用`as.sh`全量安裝把Arthas安裝到基礎(chǔ)鏡像里卸載使用命令詳解基礎(chǔ)命令helpcatechogrepbase64teepwdclsversionhistorykeymap后臺異步命令相關(guān)快捷鍵會話相關(guān)quitstopsessionresetjvm相關(guān)dashboardthreadjvmsyspropsysenvvmoptionperfcounterloggergetstaticognlmbeanheapdumpvmtoolclass
繼續(xù)訪問
Arthas基礎(chǔ)
Arthas:快速入門
繼續(xù)訪問
Arthas入門到精通
Arthas是Alibaba開源的一款Java診斷工具,方便開發(fā)者在線排查問題,無需重啟,同時可以跟蹤Java代碼,實時監(jiān)控JVM狀態(tài),目前Arthas僅支持JDK6+,支持Linux/Mac/Windows,采用命令行交互模式,具有 Tab 自動補全功能,便于開發(fā)者進行快速定位和診斷問題。 離線全量下載(如果服務(wù)器沒有外網(wǎng)可以采用這種情況)
繼續(xù)訪問
阿里Java診斷工具 arthas - 介紹及指令大全
一、arthas Arthas` 是Alibaba開源的Java診斷工具,深受開發(fā)者喜愛。 當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決: 這個類從哪個 jar 包加載的?為什么會報各種類相關(guān)的 Exception? 我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯了? 遇到問題無法在線上 debug,難道只能通過加日志再重新發(fā)布嗎? 線上遇到某個用戶的數(shù)據(jù)處理有問題,但線上同樣無法 debug,線下無法重現(xiàn)! 是否有一個全局視角來查看系統(tǒng)的運行狀況? 有什么辦法可以監(jiān)控到
繼續(xù)訪問
java診斷神器 arthas(阿爾薩斯)
java診斷神器 arthas(阿爾薩斯) 官網(wǎng)地址: 1、快速開始 1.1、windows版本安裝 # 命令行輸入 curl -0 --output arthas-boot.jar # 啟動arthas 注意:啟動前已經(jīng)要有java進程運行,否則無法進入 java -jar arthas-boot.jar --telnet-por
繼續(xù)訪問
幫助定位Java方法優(yōu)化之a(chǎn)rthas端口被占用解決的辦法
另起一個端口號 啟動arthas命令的后面加上端口號的相關(guān)參數(shù) java -jar arthas-boot.jar --telnet-port 端口號 --http-port -1 關(guān)閉占用端口的服務(wù) 先進入占用端口的服務(wù),然后輸入stop將它停掉就可以了 注:請再每一次使用之后使用stop命令退出,這樣也省掉一些不必要的麻煩!?。?...
繼續(xù)訪問
Java 診斷工具之 Arthas
Arthas 是 Alibaba 開源的 Java 診斷工具。Ta 可以動態(tài)跟蹤 Java 代碼,實時監(jiān)控 JVM 狀態(tài),可以在不中斷程序執(zhí)行的情況下輕松完成 JVM 相關(guān)問題排查工作。支持 JDK 6+,支持 Linux/Mac/Windows。
繼續(xù)訪問
Arthas-java在線調(diào)試工具的使用
一、arthas能干什么? 這個類從哪個 jar 包加載的?為什么會報各種類相關(guān)的 Exception? 我改的代碼為什么沒有執(zhí)行到?難道是我沒 commit?分支搞錯了? 遇到問題無法在線上 debug,難道只能通過加日志再重新發(fā)布嗎? 線上遇到某個用戶的數(shù)據(jù)處理有問題,但線上同樣無法 debug,線下無法重現(xiàn)! 是否有一個全局視角來查看系統(tǒng)的運行狀況? 有什么辦法可以監(jiān)控到JVM的實時運行狀態(tài)? 怎么快速定位應(yīng)用的熱點,生成火焰圖? 怎樣直接從JVM內(nèi)查找某個類的實例? Arthas支持JDK 6+
繼續(xù)訪問
Java線上診斷工具Arthas
概述 Arthas是一個開源的線上診斷工具,可以實時查看線上代碼運行情況,詳情參考Arthas 命令列表 jad命令(獲取已加載類的源碼) //主要用來看已經(jīng)加載了類的源碼,一般用于動態(tài)加載的class的源碼比較方便 [arthas@773]$ jad com/example/jvm/Hello ClassLoader: +-sun.misc.Launcher$AppClassLoader@18b4aac2 +-sun.misc.Launcher$ExtClassLoader@362d9..
繼續(xù)訪問
java 線上診斷命令
java
學習
本文講解如何在Eclipse中導(dǎo)入Android源代碼(包括Framework和Application的代碼),然后通過模擬器或真機跟蹤/調(diào)試Android的Java代碼,區(qū)別于一般基于Android SDK的純應(yīng)用開發(fā),這里可以跟蹤/調(diào)試Framework中的代碼。
一、準備工作
確保機器上已經(jīng)安裝并配置下列軟件環(huán)境:JDK/ Eclipse / Android SDK / ADT
即,機器上已經(jīng)安裝了Eclipse下Android應(yīng)用開發(fā)所需的環(huán)境。如果還未配置,移步《搭建Windows下Android應(yīng)用開發(fā)環(huán)境——Eclipse/Android/ADT》。
另外,為了跟蹤調(diào)試Android源碼,你還需要有Android源碼,并有源碼的編譯環(huán)境,可以是:
虛擬機環(huán)境 虛擬機中安裝Linux,Linux下編譯Android源碼。此環(huán)境下,如果要在宿主機的Eclipse中調(diào)試,還需要把Android的源碼路徑共享出來,宿主機可訪問到;
有單獨的可編譯Android的網(wǎng)絡(luò)環(huán)境 在你的客戶端的機器上訪問服務(wù)器共享出來的Android的源碼路徑;
Linux環(huán)境下直接通過Eclipse跟蹤調(diào)試本機上的Android源碼。
注意:不管哪種工作方式,Android源碼要都是已經(jīng)編譯過的,且編譯時采用的是Eng模式(vs User mode)。編譯Android Platform和Kernel的過程,可參考《Ubuntu10.10下編譯Android2.2平臺》及《Ubuntu10.10下編譯Android2.2內(nèi)核》。
二、基本設(shè)置
準備工作完畢之后,現(xiàn)在做一些基本的設(shè)置。
1. 把Android源碼路徑Android_ROOT下的development\ide\eclipse中的.classpath文件復(fù)制到Android_ROOT下;如果需要在模擬器中進行調(diào)試的話,需要復(fù)制三個img(具體方法見)
2. 修改Eclipse的設(shè)置
修改eclipse.ini文件,更改下列內(nèi)容:
[plain]?view plaincopy
-Xms40m
-Xmx384m
改為:
[java]?view plaincopy
-Xms128m
-Xmx512m
這里增大最小Java堆大小到128MB,增大最大Java堆大小到512MB。
三、Eclipse中創(chuàng)建工程
1. File New Java Project
2. 輸入項目名
3. 取消Use default location,并在Location中輸入或選擇Android源碼路徑Android_ROOT
4. 選擇Next Finish。會有一個漫長的等待過程
新建的工程可能會有錯誤,根據(jù)錯誤提示,加入或者刪除項目中配置的程序包。
四、調(diào)試環(huán)境配置
1. 右擊剛剛在#3中創(chuàng)建的項目;
2. 選擇:Debug As Debug Configurations…;
3. 右擊“Remote Java Application”,選擇New。或者直接雙擊“Remote Java Application”創(chuàng)建一個新的Remote Application。
4. 填入Name;Project選擇剛剛創(chuàng)建的項目Android2.3.7;端口填寫8700(不一定是8700,到DDMS Perspective下的Device View中看所需的端口號)。
5. Apply保存,然后退出。
五、調(diào)試
可以通過模擬器或者真機調(diào)試。
無論模擬器還是真機,都要:
先啟動機器(模擬器啟動,或真機打開,并通過USB與PC正常連接),也就是要在DDMS Perspective的Devices視圖中看到有機器連接;
確保運行中的代碼與你要調(diào)試的代碼是一樣的。
假如,我們想要跟蹤鎖屏解鎖的調(diào)用情況。
我們知道解鎖的實現(xiàn)是在LockScreen.java的onGrabbedStateChange()函數(shù),運行在system_process進程中。
那么,
1.????????在onGrabbedStateChange()中要調(diào)試的地方設(shè)置斷點;
2.????????在Device View中,選中system_process,并點擊小爬蟲圖標;
3.????????用Section#4創(chuàng)建的Debug配置,Debug;
4.????????在模擬器或真機上,執(zhí)行到解鎖操作時,代碼就會停在斷點處;
這樣你就可以,
把鼠標放在某個變量上,看它的值。也可以Eclipse中的各種調(diào)試手段調(diào)試你的代碼。
通過Step Into / Step Over / Resume / Suspend / Terminate等在Debug View中控制程序的執(zhí)行。
總結(jié)
通過本文可以:
本文講解是基于Windows環(huán)境的,但是不僅適用于Windows環(huán)境,同樣適用于Mac OS和Linux系統(tǒng),只是一些路徑和使用方式有差別;
可以跟蹤/調(diào)試所有Android中Java的源碼(無論Framework的代碼,還是App中的代碼),并不能Debug?Framework中的c/c++ code;
為了使整個項目在Eclipse中都能編譯過,.classpath中也包含了out/里編譯生成的內(nèi)容,所以必須保證Android源碼是已經(jīng)編譯過的。
跟蹤/調(diào)試的前提是要在所要調(diào)試代碼處設(shè)置斷點,并知道該處代碼執(zhí)行在哪個進程中。
===================================================================================================================
如果導(dǎo)入的工程有錯誤,可以參照下面方法操作。
===================================================================================================================
我們導(dǎo)入一個android自帶應(yīng)用的工程時,往往有很多錯誤。以自帶的 AlarmClock 為例,導(dǎo)入eclipse后,往往出現(xiàn)很多錯誤,如下圖所示:
例如,上圖中的Intent.ACTION_ALARM_CHANGED 無法訪問,下面我們就找到源代碼看看原因何在?
根據(jù)java 編程規(guī)范,我們知道這個api (靜態(tài)變量)被隱藏掉了,所以在sdk中無法使用。在知道了原因之后,我們有幾種解決方案(建議使用方法二):
1. 自己將源代碼中的@hide去掉,然后編譯一個sdk來替換默認的sdk。
在linux上使用? make PRODUCT-sdk-sdk 命令,編譯一個新的sdk出來,注意編譯后其實我們不需要整個sdk,只需要android.jar這個文件替換掉sdk里的android.jar,例如:筆者的sdk里的jar對應(yīng)的目錄為:
F:/Program Files/Android/android-sdk-windows/platforms/android-8/android.jar
具體編譯sdk的方法是,在linux編譯環(huán)境下用命令 make PRODUCT-sdk-sdk ,成功后,會有如下提示:?
Package SDK: out/host/linux-x86/sdk/android-sdk_eng.stevewang_linux-x86.zip
我們進入到 linux編譯環(huán)境的?out/host/linux-x86/sdk/android-sdk_eng.stevewang_linux-x86/platforms/android-2.2/目錄下可以看到android.jar?文件。使用此文件替換?? F:/Program Files/Android/android-sdk-windows/platforms/android-8/android.jar 即可。替換前記得備份
此方法較為麻煩,建議使用方法二
2. 添加framework 編譯出來的class.jar文件到 eclipse的build path
其實在編譯android的時候,我們將framework 編譯到一個臨時的jar包中了,這個jar包的路徑一般為:?
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
[font='dejavu]我們只需要在linux上android源代碼目錄下使用make 命令即可生成此文件。
[font='dejavu]
[font='dejavu]由于這個jar文件中的api 還沒有重新打包,里面被@hide掉的api并沒有被去掉。所以我們依然能夠引用里面
[font='dejavu]被@hide的api 。而sdk 中的android.jar文件時重新打包生成的,其里標記有@hide的api已經(jīng)被去掉了。
[font='dejavu]所以我們把?out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar 拷貝到本地pc上。
然后在工程中添加此jar包。
具體方法:?
1 . 拷貝linux編譯生成的? out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar到本機PC。
2,在eclipse的Android項目中,選擇項目屬性-Java Build Path-Libraries-Add Library-User Library-Next- UserLibraries進入到User Libraries管理界面,點擊New新建一個User Library,比如android_framework,點擊Add Jars把Jar包加入到建立的User Library中,最后點擊OK。
3.選擇項目屬性-Java Build Path-Order and Export,把所建立的User Libraries移到Android SDK的上面。
如下圖:
之后我們的工程錯誤消失了:
看別人的代碼是一件比較痛苦的事情,如果代碼注釋多并且編寫很規(guī)則的話那就比較好,
如果有項目需求文檔或流程設(shè)計圖最好先看看系統(tǒng)的整體功能
然后根據(jù)項目的模塊劃分對整體有一個認知
再根據(jù)模塊找到對應(yīng)的代碼模塊(需要注意模塊間的關(guān)聯(lián))
根據(jù)DB設(shè)計說明查看業(yè)務(wù)表的關(guān)聯(lián)關(guān)系
最后根據(jù)項目文檔重新查看項目整體構(gòu)成,這樣看印象比較深刻一些,千萬不要摳某一個功能的具體業(yè)務(wù)與實現(xiàn),只需要知道模塊的大概業(yè)務(wù),然后當需要的時候再進行細細研究某一功能
以上是我的經(jīng)驗之談,希望對你有幫助。