[原創] 如何用Eclispe調試java -jar xxx.jar 方式執行的jar包


有時候,我們經常會需要調試 java -jar xxx.jar方式運行的代碼,而不是必須在Eclipse中用Debug或者Run的方式運行。比如我們拿到的SourceCode不完整。Java提供了一種調試的機制。
1. 我們可以使用命令:
java -agentlib:jdwp=transport=dt_socket,server=y,address=8050,suspend=y -jar xxx.jar
來打開調試。運行后,它會在8050端口監聽調試器的Attach的信號。
2. 然后,我們在Eclipse中添加一個調試。打開Debug-Debug Configuration-Remote Java Application. 然后New 一個新的。添加上端口。
然后點擊Debug開始即可。它就會命中你所打的斷點了。
 
注意這里填寫的端口要跟前面命令里面設置的端口一樣。另外,注意看一下Connect旁邊的Source標簽。里面可以設置在哪個目錄查找源文件。也就是說,你甚至可以在沒有源文件的情況下用單步跳轉的方式跳進某個類去,然后再選擇源文件。在android的調試中,這是比較常見的情況。
 
再看一下之前那個命令的解釋。運行 Java 命令,會看到如下的解釋:
 
 
-agentlib:<libname>[=<選項>]
加載本機代理庫 <libname>, 例如 -agentlib:hprof
另請參閱 -agentlib:jdwp=help 和 -agentlib:hprof=help
 
再運行java -agentlib:jdwp=help. 可以查看JDWP支持的所有選項,不過這里並不知道 transport除了 dt_socket以外還有什么選項。
 
Java Debugger JDWP Agent Library
--------------------------------

(see http://java.sun.com/products/jpda for more information)

jdwp usage: java -agentlib:jdwp=[help]|[<option>=<value>, ...]

Option Name and Value Description Default
--------------------- ----------- -------
suspend=y|n wait on startup? y
transport=<name> transport spec none
address=<listen/attach address> transport spec ""
server=y|n listen for debugger? n
launch=<command line> run debugger on event none
onthrow=<exception name> debug on throw none
onuncaught=y|n debug on any uncaught? n
timeout=<timeout value> for listen/attach in milliseconds n
mutf8=y|n output modified utf-8 n
quiet=y|n
 
運行 java -agentlib:hprof=help, 內容比較多就不貼了。是一個CPU和內存的分析工具。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM