IDEA 社區版不支持 Tomcat?一招完美解決

IDEA 社區版不支持 Tomcat?一招完美解決

作者 | 鄭禕

IDEA 社区版不支持 Tomcat?一招完美解决

前言

IntelliJ IDEA Community Edition(社區版)不支持Tomcat,不想花錢購買Ultimate版本,也不想使用Eclipse,嘗試通過其他方式使IDEA社區版支持Tomcat。

IDEA 社区版不支持 Tomcat?一招完美解决

嘗試的方法

2.1. Smart Tomcat插件

在IDEA社區版(2019.2.4)中安裝了Smart Tomcat插件,並使用其啟動Tomcat應用,遇到了以下問題:

  1. Web應用的class文件未被自動拷貝到對應的Web應用根目錄中,導致Web應用的代碼未被加載,需要手工處理,使用不方便;

  2. Tomcat日誌只生成了localhost_access_log.txt日誌文件,沒有生成catalina.log、localhost.log等日誌文件,排查問題不方便。

使用Smart Tomcat插件遇到問題之後,放棄了使用該插件,沒有再去分析是否因為使用方法不當。

IDEA 社区版不支持 Tomcat?一招完美解决

可行方法

3.1. 說明

之後通過Gradle腳本,使IDEA社區版支持Tomcat(也支持IDEA Ultimate版)。

完成的Gradle腳本及示例Web工程代碼可以從 https://github.com/Adrninistrator/IDEA-IC-Tomcat/ 、 https://gitee.com/adrninistrator/IDEA-IC-Tomcat/ 下載,腳本內容很短,有效行數不超過200行,處理也很簡單。

通過上述Gradle腳本,結合IDEA的功能,在完成配置後,可以實現以下功能,能夠達到與Eclipse或IDEA Ultimate版本對Tomcat支持的功能接近的效果。

  • 一鍵啟動Tomcat並加載Web應用

  • 一鍵停止Tomcat(應用實例可以接收到Web容器銷燬通知)

  • 一鍵啟動可調試的Tomcat(Web應用)

  • 一鍵從Tomcat(Web應用)啟動時開始調試

3.2. 依賴環境

  • IDEA

使用IntelliJ IDEA Community Edition 2019.2.4版本。

  • Tomcat

支持Tomcat 7、8、9版本(測試過Tomcat 7.0.55、7.0.79、8.5.20、9.0.30版本),理論上也支持Tomcat 5、6版本(未測試)。

  • Gradle

支持Gradle 4、5、6版本(測試過Gradle 4.1、4.7、5.6.4、6.0.1版本)。

  • JDK

使用JDK 1.8.0_144版本。

  • 操作系統

使用Windows 7 x64 SP1版本。

3.3. IDEA中執行Gradle腳本

假設存在以下Gradle任務:

<code>task testTask {
doFirst {
println "測試-" + System.getProperty("arg")
}
}
/<code>

3.3.1. 在Terminal中執行

在IDEA的Terminal中執行以上Gradle任務時,可以通過gradle或gradlew命令,以命令行的方式執行,並可以通過“-D”前綴指定傳遞給Gradle腳本的JVM參數,與執行Java程序時類似。

執行上述任務的Gradle命令示例如下所示:

<code>gradle testTask -Darg=abc
gradlew testTask -Darg=abc
/<code>

執行的結果如下所示:

<code>> Task :testTask
測試-abc/<code>

3.3.2. 在Run/Debug Configurations中執行

打開IDEA的“Run/Debug Configurations”窗口,點擊加號後,從彈出菜單中選擇“Gradle”,可以新增一個配置,用於執行對應的Gradle任務。

IDEA 社区版不支持 Tomcat?一招完美解决

打開“Configuration”標籤頁,對參數進行修改。

  • 點擊“Gradle project”右側的圖標,選擇當前項目;

  • 在“Tasks”右側填入需要執行的Gradle任務名稱,如“testTask”;

  • 在“VM options”右側填入需要傳遞給Gradle腳本的JVM參數,如“-Darg=test_arg”,點擊箭頭圖標可以展開編輯框。

IDEA 社区版不支持 Tomcat?一招完美解决

在Run/Debug Configurations中完成配置後,可以選中對應的配置,點擊執行按鈕開始執行。

IDEA 社区版不支持 Tomcat?一招完美解决

執行的結果在“Run”窗口中顯示,如下所示:

IDEA 社区版不支持 Tomcat?一招完美解决

當需要修改Run/Debug Configurations使用的Gradle時,可以打開IDEA的“File | Settings | Build, Execution, Deployment | Build Tools | Gradle”菜單,修改“Use Gradle from”選項。

IDEA 社区版不支持 Tomcat?一招完美解决

3.3.2.1. 解決在Run/Debug Configurations中執行Gradle腳本中文亂碼問題

在Run/Debug Configurations中執行Gradle腳本或編譯過程時,輸出的中文可能亂碼。

IDEA 社区版不支持 Tomcat?一招完美解决

或如下圖所示:

IDEA 社区版不支持 Tomcat?一招完美解决

進行以下設置,可以解決上述中文亂碼問題。

  • 打開IDEA的“Help”“Edit Custom VM Options...”菜單;

IDEA 社区版不支持 Tomcat?一招完美解决
  • 在打開的文件最後增加“-Dfile.encoding=UTF-8”;

IDEA 社区版不支持 Tomcat?一招完美解决
  • 重啟已打開的IDEA後生效。

3.4. 在IDEA中進行遠程調試

3.4.1. 在IDEA創建遠程調試配置並獲取調試參數

打開IDEA的“Run/Debug Configurations”窗口,點擊加號後,從彈出菜單中選擇“Remote”,可以新增一個配置,用於進行遠程調試。

IDEA 社区版不支持 Tomcat?一招完美解决

打開“Configuration”標籤頁,對參數進行修改。

  • “Debugger mode”選項保持“Attach to remote JVM”

  • “Transport”選項保持“Socket”

  • “Host”參數保持“localhost”

  • “Port”參數指定被調試的Java進程監聽的調試端口

  • “Use module classpath”選擇被調試的Java進程對應的源代碼模塊

IDEA 社区版不支持 Tomcat?一招完美解决

“Command line arguments for remote JVM”展示的調試參數不能編輯,會跟隨上方的參數變化。

  • “Transport”選項“Socket”對應調試參數“transport=dt_socket”

  • “Port”參數對應調試參數“address=”

3.4.2. 增加調試參數後啟動被調試Java進程

複製“Command line arguments for remote JVM”對應的調試參數,將其添加到被調試Java進程的JVM參數中,啟動Java進程。

需要注意,IDEA調試配置中的Port參數,與被調試Java進程使用的調試參數中的address參數值需要相同,即調試器連接的端口需要與被調試Java進程監聽的端口一致。

3.4.3. 在IDEA啟動調試

選中對應的遠程調試配置,點擊調試按鈕開始調試,與使用IDEA啟動Java進程並調試類似。

IDEA 社区版不支持 Tomcat?一招完美解决

調試啟動成功後,在“Debug”“Console”窗口提示“Connected to the target VM”,如下所示。

IDEA 社区版不支持 Tomcat?一招完美解决

點擊停止按鈕可以停止調試,IDEA的“Debug”窗口會出現類似“Disconnected from the target VM, address: 'localhost:5555', transport: 'socket'”的提示。

IDEA 社区版不支持 Tomcat?一招完美解决

停止被調試Java進程時,IDEA啟動的調試會自動結束。

停止調試後,不會使被調試的Java進程退出。

當對Tomcat進行調試時,停止調試後在Tomcat窗口會出現類似“Listening for transport dt_socket at address: 5555”提示。

以上調試方法也支持非Web應用,以及遠程的Java進程。

3.5. runTomcat.gradle腳本使用方法

將runTomcat.gradle腳本拷貝至Java Web應用工程中,在build.gradle腳本中添加“apply from: 'runTomcat.gradle'”。

3.5.1. 任務及參數說明

runTomcat.gradle腳本中提供了名稱為“startTomcat”的任務,用於啟動Tomcat並加載Web應用。

在腳本中使用了以下參數。

3.5.1.1. 環境變量

  • TOMCAT_HOME_4IDEA

IDEA 社区版不支持 Tomcat?一招完美解决
  • TOMCAT_INSTANCE_4IDEA

IDEA 社区版不支持 Tomcat?一招完美解决

3.5.1.2. JVM參數

  • appName

IDEA 社区版不支持 Tomcat?一招完美解决
  • noBuild

IDEA 社区版不支持 Tomcat?一招完美解决
  • contextPath

IDEA 社区版不支持 Tomcat?一招完美解决
  • arg4Tomcat

IDEA 社区版不支持 Tomcat?一招完美解决

3.5.2. 環境配置

在使用提供的Gradle腳本runTomcat.gradle時,首先需要完成環境配置,“TOMCAT_HOME_4IDEA”環境變量配置需要增加,“TOMCAT_INSTANCE_4IDEA”環境變量的配置可選。

在完成環境變量配置後,需要重啟已打開的IDEA後生效。

為了驗證環境變量配置是否已生效,可在IDEA的Terminal中執行“echo %TOMCAT_HOME_4IDEA%”,當配置完成時會輸出對應的環境變量值,未配置或未生效時會輸出“%TOMCAT_HOME_4IDEA%”。

3.5.3. 使用場景

3.5.3.1. 正常啟動Tomcat進程

正常啟動Tomcat進程,加載示例工程中的Web應用的Gradle命令如下所示:

<code>gradlew startTomcat -DappName=test-tomcat -Darg4Tomcat="-DtestValue=aaabbbccc -Dlog.home=E:\\desktop\\log-test"/<code>

在以上示例中,指定當前應用對應的Tomcat實例的名稱,以及Web應用的上下文路徑,均為“test-tomcat”,指定啟動Tomcat時使用的JVM參數為“"-DtestValue=aaabbbccc -Dlog.home=E:\\desktop\\log-test"”。

第一次執行上述Gradle命令時(或刪除了當前應用對應的Tomcat實例的目錄後),Gradle腳本輸出的結果如下所示:

<code>> Configure project :
noBuild參數值:

> Task :clean
> Task :compileJava
> Task :processResources
> Task :classes

> Task :startTomcat
appName參數值: test-tomcat
contextPath參數值: test-tomcat
arg4Tomcat參數值: -DtestValue=aaabbbccc -Dlog.home=E:\\desktop\\log-test
tomcatDir參數值: C:\\program\\apache-tomcat-7.0.55
instanceDir參數值: C:\\Users\\\\user\\.tomcat_idea
當前路徑: E:\\IDEA-IC-Tomcat
當前應用使用的Tomcat實例目錄: C:\\Users\\\\user\\.tomcat_idea\\test-tomcat
生成Web應用所需文件

生成Web應用所需文件-完成
判斷是否需要創建Tomcat實例
創建Tomcat實例
文件不存在: C:\\Users\\\\user\\.tomcat_idea\\test-tomcat\\conf\\Catalina\\localhost\\test-tomcat.xml
寫入文件: C:\\Users\\\\user\\.tomcat_idea\\test-tomcat\\conf\\Catalina\\localhost\\test-tomcat.xml
生成bat停止腳本文件: C:\\Users\\\\user\\.tomcat_idea\\test-tomcat\\test-tomcat-stop.bat
文件不存在: C:\\Users\\\\user\\.tomcat_idea\\test-tomcat\\test-tomcat-stop.bat
寫入文件: C:\\Users\\\\user\\.tomcat_idea\\test-tomcat\\test-tomcat-stop.bat
生成bat啟動腳本文件: C:\\Users\\\\user\\.tomcat_idea\\test-tomcat\\test-tomcat-start.bat
文件不存在: C:\\Users\\\\user\\.tomcat_idea\\test-tomcat\\test-tomcat-start.bat
寫入文件: C:\\Users\\\\user\\.tomcat_idea\\test-tomcat\\test-tomcat-start.bat
/<code>

當以上Gradle腳本執行成功後,會啟動Tomcat,Tomcat進程會產生單獨的命令行窗口。

IDEA 社区版不支持 Tomcat?一招完美解决

使用瀏覽器訪問示例工程的Controller,URL為“ http://localhost:8080/test-tomcat/testrest/get ”,輸出結果為當前時間戳及“testValue”對應的JVM參數值,訪問結果如下所示:

IDEA 社区版不支持 Tomcat?一招完美解决

3.5.3.2. 使用Tomcat實例啟動腳本啟動Tomcat進程

runTomcat.gradle腳本的“startTomcat”任務執行時,會在當前Web應用對應的Tomcat實例目錄生成啟動腳本,如前文輸出的示例“C:\\Users\\\\user\\.tomcat_idea\\test-tomcat\\test-tomcat-start.bat”。

當不需要對Web應用重新編譯時,可以直接執行上述啟動腳本,啟動Tomcat進程,加載Web應用。

3.5.3.3. 停止Tomcat進程

在示例工程中,TestPostConstructLazyFalse.preDestroy方法使用了@PreDestroy註解,該方法會在應用停止階段執行,會在當前目錄生成名稱為“preDestroy-”及當前時間戳的目錄。

3.5.3.3.1. 直接關閉Tomcat窗口(應用實例無法接收到Web容器銷燬通知)

將Tomcat窗口關閉,可以停止Tomcat進程。

通過該方法停止Tomcat進程,會使Tomcat進程直接結束,應用實例無法接收到Web容器銷燬通知,示例工程的TestPostConstructLazyFalse.preDestroy方法不會執行,當前目錄不會生成目錄。

3.5.3.3.2. 使用Tomcat實例停止腳本停止Tomcat進程(應用實例可以接收到Web容器銷燬通知)

runTomcat.gradle腳本的“startTomcat”任務執行時,會在當前Web應用對應的Tomcat實例目錄生成停止腳本,如前文輸出的示例“C:\\Users\\\\user\\.tomcat_idea\\test-tomcat\\test-tomcat-stop.bat”。

執行上述停止腳本,會執行Tomcat提供的stop命令,可以停止Tomcat進程,應用實例可以接收到Web容器銷燬通知,示例工程的TestPostConstructLazyFalse.preDestroy方法會執行,當前目錄會生成目錄,如下所示。

IDEA 社区版不支持 Tomcat?一招完美解决

3.5.3.4. 調試Web應用

以下在IDEA創建遠程調試配置並獲取調試參數的過程,可以參考前文對應內容。

3.5.3.4.1. 進程啟動後調試

  • 啟動Tomcat進程

獲取到調試參數如下所示:

<code>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5555
/<code>

在執行Gradle “startTomcat”任務時,添加以上參數至arg4Tomcat參數中(可添加到IDEA的“Run/Debug Configurations”的Gradle配置中),如下所示:

<code>gradlew -DappName=test-tomcat
-Darg4Tomcat="-DtestValue=aaabbbccc -Dlog.home=E:\\desktop\\log-test -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5555"/<code>

執行以上Gradle命令後,啟動Tomcat進程。

  • 啟動IDEA調試

之後可以在IDEA中啟動調試。

對URI“/testrest/get”對應的TestRestController.get方法設置斷點,通過瀏覽器訪問後,IDEA調試器進入斷點,可在“Debug”“Debugger”窗口查看。

IDEA 社区版不支持 Tomcat?一招完美解决

3.5.3.4.2. 從進程啟動開始調試(操作兩次)

以上使用的調試參數中的suspend參數值為“n”,被調試的進程在啟動時不會暫停線程,會正常啟動。只支持先啟動被調試進程,再進行調試。

當需要從進程啟動開始調試時,需要將調試參數中的suspend參數值設為“y”,被調試的進程在啟動時會暫停線程,等待調試器連接address指定的端口後,才會繼續啟動。

  • 啟動Tomcat進程

當需要從進程啟動開始調試時,調試參數示例如下。

<code>-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5555/<code>

將Gradle任務“startTomcat”的“arg4Tomcat”參數中配置的“suspend”參數設置為“y”,再通過該命令啟動Tomcat,Tomcat窗口只顯示“Listening for transport dt_socket at address: 5555”,未顯示其他內容,即Tomcat進程此時在等待調試器連接address參數對應的端口,未完成啟動。

IDEA 社区版不支持 Tomcat?一招完美解决
  • 啟動IDEA調試

在Web應用初始化階段會執行的代碼設置斷點,例如在示例工程的帶有@PostConstruct註解的TestPostConstructLazyFalse.postConstruct方法設置斷點。

在IDEA啟動調試,查看Tomcat窗口日誌已更新,說明Tomcat進程已啟動。

查看IDEA調試窗口,已進入以上設置的斷點,證明可以從Web應用啟動開始調試。

IDEA 社区版不支持 Tomcat?一招完美解决

3.5.3.4.3. 從進程啟動開始調試(一鍵完成)

以上從進程啟動開始調試的操作需要先啟動Tomcat進程,再啟動IDEA調試,可以優化為一鍵完成。

打開IDEA的“Run/Debug Configurations”窗口,選擇“Remote”配置,點擊“Before launch: Activate tool window”下方的加號按鈕,選擇“Run Gradle task”。

IDEA 社区版不支持 Tomcat?一招完美解决

彈出“Select Gradle Task”窗口,“Gradle project”“Tasks”“VM options”參數配置,可參考在IDEA添加Gradle配置,通過“startTomcat”任務啟動Tomcat進程的步驟,需要確保“VM options”參數填寫的“arg4Tomcat”參數中的調試參數“suspend”為“y”。

IDEA 社区版不支持 Tomcat?一招完美解决

“Before launch: Activate tool window”下方的列表會出現配置的Gradle任務。

IDEA 社区版不支持 Tomcat?一招完美解决

完成以上配置後,在啟動IDEA調試之前,會執行指定的Gradle任務“startTomcat”,以“suspend=y”的調試參數啟動Tomcat進程。可以實現一鍵從進程啟動開始調試,與IDEA Ultimate版或Eclipse對Web應用從啟動開始調試的效果類似。

3.5.3.4.4. 調試Tomcat的類

當需要對Tomcat的類進行調試時,需要將Tomcat的lib目錄添加至IDEA的Web應用工程的依賴中,否則調試時無法查看Tomcat的類。

打開IDEA的“Project Structure”窗口,選擇“Project Settings”“Modules”標籤頁,在打開的窗口中選擇Web項目主模塊,選擇“Dependencies”標籤頁,點擊加號按鈕,選擇“JARs or directories...”菜單。

IDEA 社区版不支持 Tomcat?一招完美解决

在彈出的窗口,選擇當前使用的Tomcat的安裝目錄的lib目錄。

IDEA 社区版不支持 Tomcat?一招完美解决

完成添加後,Tomcat的lib目錄會出現在“Dependencies”標籤頁的最下方。

IDEA 社区版不支持 Tomcat?一招完美解决

當刷新Gradle後,項目配置會重置,以上添加的依賴會被清理,需要重新添加。

完成以上配置後,在Tomcat的org.apache.catalina.startup.HostConfig$DeployDescriptor類run方法設置斷點,從進程啟動開始調試,可以在IDEA的Debug窗口看到已進入斷點。該方法是Tomcat啟動時執行的第一個Tomcat的類的方法。

IDEA 社区版不支持 Tomcat?一招完美解决

3.6. 其他說明

  • 生成Web應用所需文件調整

runTomcat.gradle腳本中buildFiles4WebApp方法用於生成Web應用所需文件,拷貝的目錄與文件可以根據實際情況調整。

  • 調試端口需要確保未被監聽

被調試Java進程的調試參數中指定的adderss參數對應的調試端口,需要確保未被監聽,否則被調試Java進程會啟動失敗,窗口會自動消失,Tomcat的提示如下。

IDEA 社区版不支持 Tomcat?一招完美解决
  • 重新創建Tomcat實例

當因為需要修改使用的Tomcat版本,或其他原因,導致需要重新創建Web應用使用的Tomcat實例時,需要將對應的Tomcat實例目錄刪除,如“C:\\Users\\\\user.tomcat_idea\\test-tomcat”,之後再執行Gradle的startTomcat任務。

  • Tomcat實例目錄配置修改與日誌查看

當前Web應用對應的Tomcat實例目錄,在執行Gradle “startTomcat”任務時會輸出,如“C:\\Users\\\\user.tomcat_idea\\test-tomcat”。

當需要修改當前Web應用對應的Tomcat使用的HTTP服務端口、SSL配置、線程池數量等參數時,可以修改Tomcat實例目錄的“conf\\server.xml”文件,說明略。

當需要同時啟動多個Tomcat進程分別加載不同的Web應用時,需要先修改對應Tomcat實例的“conf\\server.xml”文件中的監聽端口,避免不同的Tomcat實例使用同一個端口導致不可用。

Tomcat實例目錄的“logs”目錄保存了Tomcat日誌文件,使用默認配置時,包括“catalina.log”“localhost.log”“localhost_access_log.txt”“host-manager.log”“manager.log”等。

3.7. 原理說明

通過runTomcat.gradle腳本啟動Tomcat進程並加載Web應用,與Eclipse或IDEA Ultimate(2018.3及之前版本)的原理類似,如下所示。

3.7.1. 生成Web應用所需文件

當noBuild參數未指定或為空時,會先執行Gradle的classes任務完成編譯,再執行buildFiles4WebApp方法,完成以下操作:

  • 將編譯生成的class文件拷貝至“build/tomcat/WEB-INF/classes”目錄中

  • 將“src/main/resources/”目錄(配置文件)拷貝至“build/tomcat/WEB-INF/classes”目錄中

  • 將“src/main/webapp/”目錄(靜態資源與WEB-INF/web.xml文件)拷貝至“build/tomcat”目錄中

  • 將依賴的jar包拷貝至“build/tomcat/WEB-INF/lib”目錄中

3.7.2. 生成Tomcat實例

判斷當前應用使用的Tomcat實例目錄是否已存在,若已存在時則不再處理。

當前應用使用的Tomcat實例目錄不存在時,進行以下操作生成Tomcat實例:

在“TOMCAT_INSTANCE_4IDEA”環境變量參數值對應的目錄,或當前用戶目錄的“.tomcat_idea”目錄中,創建當前Web應用使用的Tomcat實例目錄,使用Gradle “startTomcat”任務執行時的“appName”參數值作為目錄名稱;

將“TOMCAT_HOME_4IDEA”環境變量參數值指定的,需要使用的Tomcat安裝目錄的bin、conf目錄拷貝至當前Web應用使用的Tomcat實例目錄中;

在當前Web應用使用的Tomcat實例目錄創建logs、temp、work目錄。

3.7.3. 處理Tomcat上下文描述符文件

上下文描述符是一個XML文件,其中包含與Tomcat相關的上下文配置,例如命名資源或會話管理器配置等。當Tomcat啟動時,上下文描述符會被首先部署。可參考 https://tomcat.apache.org/tomcat-7.0-doc/deployer-howto.html 。

上下文描述符需要保存在當前Web應用使用的Tomcat實例目錄的“conf\\Catalina\\localhost”目錄中,當前Web應用的上下文路徑與上下文描述符文件名相同(不含.xml後綴),上下文路徑的大小寫與文件名的大小寫一致。

runTomcat.gradle腳本會檢查當前Web應用對應的Tomcat實例的上下文描述符,若文件已存在且內容不需要修改,則不執行寫入操作;若文件不存在或文件內容需要修改,則執行文件寫入操作。

3.7.4. 生成Tomcat實例啟動/停止腳本

Tomcat實例啟動/停止腳本會保存在當前Web應用對應的Tomcat實例目錄中。

runTomcat.gradle腳本會檢查對應的腳本文件,在需要寫入時進行寫入操作。

在啟動腳本中會調用Tomcat實例目錄的“bin\\startup.bat”腳本;在停止腳本中會調用Tomcat實例目錄的“bin\\shutdown.bat”腳本。

3.7.5. 啟動Tomcat

runTomcat.gradle腳本會執行生成的Tomcat實例啟動腳本,以啟動Tomcat。

3.7.6. 調試Web應用

以上的遠程調試使用了JDWP(Java Debug Wire Protocol),可參考 https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/jdwp-spec.html ,JDWP是用於調試器與其調試的Java虛擬機之間的通信協議。

JPDA(The Java Platform Debugger Architecture)包含三個接口,供調試器在桌面系統的開發環境中使用。JDWP屬於其中一個,JPDA的說明可參考 https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/ 。

在JPDA連接和調用詳細信息(https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/conninv.html )中,說明當suspend參數為“y”時,VMStartEvent會使用SUSPEND_ALL作為暫停策略;當suspend參數為“n”時,VMStartEvent會使用SUSPEND_NONE作為暫停策略。

參考

https://docs.oracle.com/javase/8/docs/jdk/api/jpda/jdi/com/sun/jdi/request/EventRequest.html ,說明SUSPEND_ALL在事件發生時會暫停全部線程;SUSPEND_NONE在事件發生時不會暫停線程。

根據以上說明可知,當Java進程的調試參數中的suspend參數為“y”時,在啟動時會暫時全部線程;suspend參數為“n”時,在啟動時不會暫時線程。


分享到:


相關文章: