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

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

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

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

寫一個(gè)簡(jiǎn)單程序打成jar丟到遠(yuǎn)程服務(wù)器運(yùn)行,模擬遠(yuǎn)程Server在運(yùn)行。就拿Java調(diào)用shell腳本提交作業(yè)程序?yàn)槔治?。源碼如下(如下程序就是一個(gè)簡(jiǎn)單示例代碼,不要在乎代碼規(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沒有連接上之前程序退出(測(cè)試suspend參數(shù)功能) 
       */
      System.out.println("shell腳本執(zhí)行完畢,接下來開始進(jìn)行定時(shí)打印任務(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包提交到遠(yuǎn)程服務(wù)器之后運(yùn)行:

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

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

點(diǎn)擊debugger即可進(jìn)行連接,跟蹤源碼運(yùn)行:

遠(yuǎn)程有輸出,證明遠(yuǎn)程程序正在跟蹤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

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

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

然后啟動(dòng)debugger之后:

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

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

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

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

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

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

Eclipse debug快捷鍵:

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

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

相關(guān)文章

  • protobuf與json轉(zhuǎn)換小結(jié)

    protobuf與json轉(zhuǎn)換小結(jié)

    protobuf對(duì)象不能直接使用jsonlib去轉(zhuǎn),因?yàn)閜rotobuf生成的對(duì)象的get方法返回的類型有byte[],而只有String類型可以作為json的key,protobuf提供方法進(jìn)行轉(zhuǎn)換
    2017-07-07
  • Java的ConcurrentHashMap原理深入分析

    Java的ConcurrentHashMap原理深入分析

    這篇文章主要介紹了Java的ConcurrentHashMap原理深入分析,集合是編程中最常用的數(shù)據(jù)結(jié)構(gòu),而談到并發(fā),幾乎總是離不開集合這類高級(jí)數(shù)據(jù)結(jié)構(gòu)的支持,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于RestTemplate中的Get請(qǐng)求

    關(guān)于RestTemplate中的Get請(qǐng)求

    這篇文章主要介紹了關(guān)于RestTemplate中的Get請(qǐng)求,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • JAVA通過HttpURLConnection 上傳和下載文件的方法

    JAVA通過HttpURLConnection 上傳和下載文件的方法

    這篇文章主要介紹了JAVA通過HttpURLConnection 上傳和下載文件的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • 基于java開發(fā)之系統(tǒng)托盤的應(yīng)用

    基于java開發(fā)之系統(tǒng)托盤的應(yīng)用

    本篇文章介紹了,基于java開發(fā)之系統(tǒng)托盤的應(yīng)用。需要的朋友參考下
    2013-05-05
  • 利用Java計(jì)算某個(gè)日期是星期幾

    利用Java計(jì)算某個(gè)日期是星期幾

    不知道大家有沒有遇到過同樣的問題,誰誰的生日又要到了,看看是星期幾?每年都要遇到好幾次,所以想索性利用Java寫個(gè)小工具,一次查詢某具體日期在n年中分別是星期幾。這樣不就方便了嗎?本文里給出了詳細(xì)的示例代碼,感興趣的朋友們下面來一起看看吧。
    2016-10-10
  • Eclipse查看開發(fā)包jar里源代碼的方法

    Eclipse查看開發(fā)包jar里源代碼的方法

    這篇文章主要介紹了Eclipse查看開發(fā)包jar里源代碼的方法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Spring Cloud Data Flow初體驗(yàn)以Local模式運(yùn)行

    Spring Cloud Data Flow初體驗(yàn)以Local模式運(yùn)行

    這篇文章主要介紹了Spring Cloud Data Flow初體驗(yàn)以Local模式運(yùn)行,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java 中實(shí)現(xiàn)隨機(jī)無重復(fù)數(shù)字的方法

    Java 中實(shí)現(xiàn)隨機(jī)無重復(fù)數(shù)字的方法

    為了更好地理解這個(gè)題意,我們先來看下具體內(nèi)容:生成一個(gè)1-100 的隨機(jī)數(shù)組,但數(shù)組中的數(shù)字不能重復(fù),即位置是隨機(jī)的,但數(shù)組元素不能重復(fù)
    2013-03-03
  • MyBatis Generator介紹及使用方法

    MyBatis Generator介紹及使用方法

    MyBatis Generator 是一款針對(duì) MyBatis 或 iBATIS 設(shè)計(jì)的代碼生成器,由 MyBatis 官方提供,這篇文章主要介紹了MyBatis Generator介紹及使用方法,需要的朋友可以參考下
    2023-06-06

最新評(píng)論