原文地址:https://www.cnblogs.com/zzpbuaa/p/5443269.htmlhtml
有時候,咱們常常會須要調試 java -jar xxx.jar方式運行的代碼,而不是必須在Eclipse中用Debug或者Run的方式運行。好比咱們拿到的SourceCode不完整。Java提供了一種調試的機制。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和內存的分析工具。