91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java關于遠程調試程序教程(以Eclipse為例)

發布時間:2020-09-21 10:49:04 來源:腳本之家 閱讀:182 作者:leodaxin 欄目:編程語言

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

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

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));

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

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

    }
  }
}

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

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

Java關于遠程調試程序教程(以Eclipse為例)

會發現程序阻塞,并等待debugger連接,此時我們可以使用eclipse進行遠程調試:

Java關于遠程調試程序教程(以Eclipse為例)

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

Java關于遠程調試程序教程(以Eclipse為例)

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

Java關于遠程調試程序教程(以Eclipse為例)

到此我們就完成了調試的過程。接下來試一下參數suspend=n的情況:

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

此時會發現遠程程序并沒有阻塞等待調試器debugger連接,而是程序正常執行:

Java關于遠程調試程序教程(以Eclipse為例)

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

Java關于遠程調試程序教程(以Eclipse為例)

然后啟動debugger之后:

Java關于遠程調試程序教程(以Eclipse為例)

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

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

如果您剛開始就想調試的話,將參數設置為"suspend=y",這樣Eclipse會遠程連接Java應用程序。

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

更多參數細節:

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

Eclipse debug快捷鍵:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高淳县| 隆子县| 纳雍县| 广东省| 乌鲁木齐县| 津南区| 东辽县| 武安市| 台南县| 黄冈市| 东至县| 青田县| 吉隆县| 宜丰县| 焉耆| 隆安县| 新巴尔虎右旗| 安义县| 涿州市| 白水县| 安仁县| 且末县| 邵阳县| 烟台市| 康定县| 拉萨市| 镇赉县| 安岳县| 杨浦区| 新闻| 安陆市| 略阳县| 双桥区| 泸水县| 东兴市| 乐业县| 鱼台县| 封开县| 阜宁县| 汉沽区| 梓潼县|