欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java關(guān)于遠程調(diào)試程序教程(以Eclipse為例)

 更新時間:2018年06月28日 11:04:19   作者:leodaxin  
這篇文章主要介紹了Java關(guān)于遠程調(diào)試程序教程(以Eclipse為例),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本節(jié)嘗試一下Java遠程調(diào)試的東西,記錄一遍簡單入門的東西。也就算是使用記錄吧!

寫一個簡單程序打成jar丟到遠程服務(wù)器運行,模擬遠程Server在運行。就拿Java調(diào)用shell腳本提交作業(yè)程序為例分析。源碼如下(如下程序就是一個簡單示例代碼,不要在乎代碼規(guī)范):

import java.io.InputStream;

public class JavaShell {

  public static void main(String[] args) throws Exception {

    try {
      String grant = "chmod u+x submit-job.sh";
      Runtime runtime = Runtime.getRuntime();

      Process grantProc = runtime.exec(grant);
      int resultCode = grantProc.waitFor();
      System.out.println(resultCode);
      grantProc = runtime.exec("./submit-job.sh");
      resultCode = grantProc.waitFor();

      System.out.println(resultCode);
      InputStream in = grantProc.getInputStream();
      byte[] buffer = new byte[1024];
      int code;
      while ((code = in.read(buffer, 0, buffer.length)) != -1) {
        System.out.print(new String(buffer, 0, code));

      }
      
      /**
       * 死循環(huán)阻止debugger沒有連接上之前程序退出(測試suspend參數(shù)功能) 
       */
      System.out.println("shell腳本執(zhí)行完畢,接下來開始進行定時打印任務(wù)!");
      int i = 0;
      while (true) {
        Thread.sleep(2000);
        System.out.println("這是第" + (++i) + "次循環(huán)!");
      }

    } catch (Exception e) {
      System.out.println("this is a excption !");
    } finally {

    }
  }
}

打成Jar包提交到遠程服務(wù)器之后運行:

復(fù)制代碼 代碼如下:
java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=y -jar JavaShell.jar

會發(fā)現(xiàn)程序阻塞,并等待debugger連接,此時我們可以使用eclipse進行遠程調(diào)試:

點擊debugger即可進行連接,跟蹤源碼運行:

遠程有輸出,證明遠程程序正在跟蹤debugger執(zhí)行:

到此我們就完成了調(diào)試的過程。接下來試一下參數(shù)suspend=n的情況:

復(fù)制代碼 代碼如下:
java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n -jar JavaShell.jar

此時會發(fā)現(xiàn)遠程程序并沒有阻塞等待調(diào)試器debugger連接,而是程序正常執(zhí)行:

此時我們可以使用eclipse的遠程debugger進行遠程調(diào)試,但是需要注意:此時我們本地的斷點只能打在遠程還沒有執(zhí)行的代碼處或者正在執(zhí)行的代碼位置,例如我們就可以在死循環(huán)中打斷點(死循環(huán)是一直正在執(zhí)行的代碼):

然后啟動debugger之后:

停留在斷點處。然后跟著斷點位置繼續(xù)我們的debug工作。到此就應(yīng)該可以知道suspend參數(shù)的作用了:

在JVM DEBUG參數(shù)中,有一個參數(shù)叫"suspend",它的取值有兩個,“y”或者“n”。

如果您剛開始就想調(diào)試的話,將參數(shù)設(shè)置為"suspend=y",這樣Eclipse會遠程連接Java應(yīng)用程序。

如果你想先運行項目,然后連接Eclipse,那么可以將參數(shù)設(shè)置為"suspend=n",這樣的話,Java應(yīng)用程序會正常運行,之后Eclipse會開始遠程連接。

更多參數(shù)細節(jié):

-XDebug 啟用調(diào)試。
-Xnoagent 禁用默認sun.tools.debug調(diào)試器。
-Djava.compiler=NONE 禁止 JIT 編譯器的加載。
-Xrunjdwp 加載JDWP的JPDA參考執(zhí)行實例。
transport 用于在調(diào)試程序和 VM 使用的進程之間通訊。
dt_socket 套接字傳輸。
dt_shmem 共享內(nèi)存?zhèn)鬏敚瑑H限于 Windows。
server=y/n VM 是否需要作為調(diào)試服務(wù)器執(zhí)行。
address=3999 調(diào)試服務(wù)器的端口號,客戶端用來連接服務(wù)器的端口號。
suspend=y/n 是否在調(diào)試客戶端建立連接之后啟動 VM 。

Eclipse debug快捷鍵:

F5 Step into
F6 Step over
F7 Step out
F8 continue to the next breakpoint

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入分析Spring Cloud 負載均衡器架構(gòu)選型

    深入分析Spring Cloud 負載均衡器架構(gòu)選型

    文章詳細介紹了OpenFeign的初始化和執(zhí)行流程,包括FeignClient注解、FeignClientsRegistrar類、FeignClientFactoryBean工廠類、Targeter接口及其實現(xiàn)等,感興趣的朋友一起看看吧
    2024-12-12
  • Java語言Consistent Hash算法學(xué)習(xí)筆記(代碼示例)

    Java語言Consistent Hash算法學(xué)習(xí)筆記(代碼示例)

    這篇文章主要介紹了Java語言Consistent Hash算法學(xué)習(xí)筆記(代碼示例),分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • IDEA 2021.1 操作SVN 最新超詳細教程(圖文)

    IDEA 2021.1 操作SVN 最新超詳細教程(圖文)

    本教程將通過idea從svn服務(wù)器中的任意一個分支檢出代碼(本文采用branches),然后再idea中創(chuàng)建新的分支、提交代碼、拉取代碼、合并分支等操作進行一一記錄,暫不包含代碼合并,對idea2021.1操作svn相關(guān)知識感興趣的朋友一起學(xué)習(xí)下吧
    2021-05-05
  • Java中的拷貝數(shù)組CopyOnWriteArrayList詳解

    Java中的拷貝數(shù)組CopyOnWriteArrayList詳解

    這篇文章主要介紹了Java中的拷貝數(shù)組CopyOnWriteArrayList詳解,ArrayList和LinkedList都不是線程安全的,如果需要線程安全的List,可以使用synchronizedList來生成一個同步list,但是這個同步list的方法都是通過synchronized修飾來保證同步的,需要的朋友可以參考下
    2023-12-12
  • Java數(shù)據(jù)結(jié)構(gòu)之對象的比較

    Java數(shù)據(jù)結(jié)構(gòu)之對象的比較

    比較對象是面向?qū)ο缶幊陶Z言的一個基本特征,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之對象的比較,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對比

    Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對比

    本文主要介紹了Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對比,分享給大家,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Mybatis-Plus中的selectByMap使用實例

    Mybatis-Plus中的selectByMap使用實例

    Mybatis-Plus來對數(shù)據(jù)庫進行增刪改查時,將里面的函數(shù)試了個遍,接下來我就將使用selectByMap函數(shù)的簡單測試實例寫出來,方便沒有使用過的朋友們快速上手,感興趣的可以了解一下
    2021-11-11
  • mybatis如何批量更新list對象

    mybatis如何批量更新list對象

    這篇文章主要介紹了mybatis如何批量更新list對象問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java實戰(zhàn)之猜字小游戲

    java實戰(zhàn)之猜字小游戲

    這篇文章主要介紹了java實戰(zhàn)之猜字小游戲,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助呦,需要的朋友可以參考下
    2021-04-04
  • 基于SpringBoot整合SSMP案例(開啟日志與分頁查詢條件查詢功能實現(xiàn))

    基于SpringBoot整合SSMP案例(開啟日志與分頁查詢條件查詢功能實現(xiàn))

    這篇文章主要介紹了基于SpringBoot整合SSMP案例(開啟日志與分頁查詢條件查詢功能實現(xiàn)),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋參考下吧
    2023-11-11

最新評論