idea 导出war包_使用IDEA实现远程代码DEBUG调试教程详解
我們在使用 IDEA DEBUG調試代碼的時候,常常見到控制臺會輸出一句這樣的話:「Connected to the target VM, address: '127.0.0.1:62981', transport: 'socket'」,所以即使代碼不在本地運行,只要JVM打開調試模式,并且網絡能夠用過 socket 連接到JVM,使用 Debug 協議通過 Socket 通信就可以傳遞調試指令和調試信息。
IDEA配置啟動環境(遠程Debug服務器)
打開Intellij IDEA,在頂部靠右的地方選擇”Edit Configurations”,進去之后點擊左上角的+號,選擇”Remote”,見下圖,其中Name填寫名稱,可以隨便起一個名字,host是你要遠程調試代碼的機器ip/hostname,port是調試監聽端口,如果遠端服務器已經開啟了遠程調試端口就填遠程端口,如果沒開,那么先選默認的5005端口,Use Module classpath 是選擇遠程運行的代碼模塊是哪個模塊下的。
在Command line arguments for remote JVM,右側選擇JDK版本,這個是根據你遠程服務器上運行的JDK版本選的,我這里選擇 JDK5-8,就會給你一條命令,我這里得到的是:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005這條命令就是啟動遠程調試的命令,有好奇的同學,咱們解釋一下什么意思:
- jdwp是Java Debug Wire Protocol的縮寫
- transport:有兩種形式,分別是socket和shared memory,需要跨機器,只能用socket;
- server:JVM是否需要作為調試服務器執行
- suspend:是否調試客戶端建立連接之后啟動虛擬機。如果是y,則需要等調試端機器上的debugger開啟后,程序才會開始運行。否則,程序啟動時候不會掛起,直接運行。
- address:監聽端口5005作為調試端口
服務端調試環境
Jar包方式啟動的程序
以Jar包方式啟動的程序,例如SpringBoot,可以在啟動的時候添加這個命令,例如:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 web.jarTomcat(war包)項目
以Tomcat(war包)運行的項目需要修改Tomcat啟動腳本,Linux 的是 catalina.sh,Windows 的是 catalina.bat,將這個命令添加進去:
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"服務器端的JVM參數添加好,等到程序啟動,你就可以開始運行你電腦上的DEBUG了。如果連接失敗,記得檢查網絡防火墻是否放行了端口。
探究原理
核心是JPDA(Java Platform Debugger Architecture)框架。IBM有非常詳細的介紹:
- https://www.ibm.com/developerworks/cn/java/j-lo-jpda1/
- https://www.ibm.com/developerworks/cn/java/j-lo-jpda2/
- https://www.ibm.com/developerworks/cn/java/j-lo-jpda3/
- https://www.ibm.com/developerworks/cn/java/j-lo-jpda4/
關鍵摘抄如下:
- JPDA是JVM的調試標準,任何JDK都必須實現。
- 調試Java程序,本質是向JVM請求當前狀態。這需要對JVM發送一定指令,設置一定回調。
- JPDA的三個層次:Java 虛擬機工具接口(JVMTI),Java 調試線協議(JDWP)以及 Java 調試接口(JDI)。它們之間的角色圖:
- JVMTI(Java Virtual Machine Tool Interface):通向JVM的native的接口,處于體系最底層。所有的調試功能都需要該接口提供。是debug和profiler的接口,是線程分析、監聽和代碼覆蓋率檢查的基礎。會有個緊耦合的Agent來實現JVMTI。該Agent的加載時間是出于JVM初始化早期或者運行時加載(對應于上文中的suspend參數)。
- JDWP(Java Debug Wire Protocol):交互的通訊協議。定義了交互中的命令、回應數據和錯誤代碼。不包含傳輸層具體實現。主要分為握手和應答兩個階段。
- JDI(Java Debug Interface):對JDWP進行解析,為JDWP提供隊列、緩存等服務。分為數據模塊,將虛擬機上的所有數據、狀態映射為Java的數據對象;鏈接模塊,調試器向虛擬機發起鏈接,以獲得各種狀態,分為主動和被動形式。事件請求和處理模塊。
- 由于JVM神一般的存在,使得Java的運行是先天可控的,因此其調試程序的開發,也遠容易與C++。
- 類似工具:Apache harmony
總結
以上是生活随笔為你收集整理的idea 导出war包_使用IDEA实现远程代码DEBUG调试教程详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云顶之弈机器人法爆_云顶之弈10.16b
- 下一篇: java 短路判断_java中和的区别(