日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

idea 导出war包_使用IDEA实现远程代码DEBUG调试教程详解

發布時間:2023/12/2 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.jar

Tomcat(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调试教程详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。