最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

IntelliJ IDEA遠(yuǎn)程Debug Linux的Java程序,找問題不要只會(huì)看日志了(推薦)

 更新時(shí)間:2020年09月05日 08:59:43   作者:南瓜慢說  
這篇文章主要介紹了IntelliJ IDEA遠(yuǎn)程Debug Linux的Java程序,找問題不要只會(huì)看日志了,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1 前言

我們習(xí)慣于在本地開發(fā)的時(shí)候debug,能快速定位與解決問題,那部署在服務(wù)器上是不是就沒有辦法了呢?只能通過查看日志來定位?

不是的,在遠(yuǎn)端的服務(wù)器上,我們一樣可以debug。

2 IDEA的debug

我們先來看一下在IntelliJ IDEA直接debug是怎樣的。

先準(zhǔn)備一個(gè)簡單的Java程序:

package com.pkslow.basic;
import java.util.Map;

public class RemoteDebug {
 public static void main(String[] args) {
 System.out.println("------------------start------------------");
 
 System.out.println("get all the system environment");
 Map<String, String> envs = System.getenv();

 System.out.println("\nprint out the contains `HOME`");
 System.out.println("------env HOME------");
 envs.entrySet().stream()
 .filter(env -> env.getKey().contains("HOME"))
 .forEach(env -> {
 System.out.println(env.getKey() + ":" + env.getValue());
 });

 System.out.println("------------------end------------------");
 }
}

功能很簡單,獲取所有系統(tǒng)環(huán)境變量,并打印出含有HOME字段的。

Debug很簡單,直接點(diǎn)擊以下按鈕就可以:

相信大家都知道這一點(diǎn),但應(yīng)該很多人都不會(huì)注意,IDEA究竟做了什么,為什么就可以調(diào)試了呢?我們看一下控制臺(tái)的日志就明白了:

/Library/Java/JavaVirtualMachines/jdk1.8.0_212.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59313,suspend=y,server=n -javaagent:/Users/pkslow/Library/Caches/IntelliJIdea2019.3/captureAgent/debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "/Library/Java/JavaVirtualMachines/jdk1.8.0_212.jdk/Contents/Home/jre/lib/charsets.jar:" com.pkslow.basic.RemoteDebug

簡化一下,不重要的參數(shù)去掉:

java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59313,suspend=y,server=n com.pkslow.basic.RemoteDebug

這就是可以Debug的原因,利用了Java Agent原理。這個(gè)功能很強(qiáng)大,類似一個(gè)AOP,代理了Java程序,可以利用它進(jìn)行調(diào)試、熱部署等。

3 調(diào)試本地程序

我們先試試如何可以調(diào)試本地程序,不是直接在IDEA上調(diào)試。先要編譯出class文件RemoteDebug.class,然后按package結(jié)構(gòu)放好。我通過mvn clean compile來編譯。

啟動(dòng)程序,在target/classes/目錄執(zhí)行:

$ java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50050,suspend=y,server=y com.pkslow.basic.RemoteDebug
Listening for transport dt_socket at address: 50050

然后程序就會(huì)等待調(diào)試客戶端的連接,不會(huì)往下執(zhí)行。

配置IDEA以進(jìn)行調(diào)試:

配置完成保存后,點(diǎn)擊debug就可以了:

程序已經(jīng)進(jìn)入debug模式:

我們已經(jīng)執(zhí)行到了其中一行,現(xiàn)在看看服務(wù)端:

IDEA是同步的,并且確實(shí)已經(jīng)控制了服務(wù)端Java的執(zhí)行。

4 遠(yuǎn)程調(diào)試Linux Java程序

先把程序部署在Linux上:

$ scp -P 22 ./com/pkslow/basic/RemoteDebug.class root@xxx.xx.xx.xxx:/root/remoteDebug/com/pkslow/basic/
RemoteDebug.class 100% 2572 282.5KB/s 00:00 

通過以下命令在服務(wù)端啟動(dòng)程序,這里調(diào)試端口改為9999,因?yàn)椴糠侄丝谠谶h(yuǎn)程服務(wù)器并沒有開啟:

java -agentlib:jdwp=transport=dt_socket,address=9999,suspend=y,server=y com.pkslow.basic.RemoteDebug

本地電腦IDEA配置如下:

開始debug,正??刂屏诉h(yuǎn)程服務(wù)端的Java

服務(wù)端的實(shí)時(shí)執(zhí)行情況:

讓程序執(zhí)行完如下:

$ java -agentlib:jdwp=transport=dt_socket,address=9999,suspend=y,server=y com.pkslow.basic.RemoteDebug
Listening for transport dt_socket at address: 9999
------------------start------------------
get all the system environment

print out the contains `HOME`
------env HOME------
JAVA_HOME:/root/jdk1.8.0_131
HOME:/root
------------------end------------------

5 總結(jié)

本文一步步探索如何進(jìn)行調(diào)試遠(yuǎn)程的服務(wù)器,這在出現(xiàn)問題時(shí)定位還是非常有用的。畢竟可以實(shí)時(shí)看到服務(wù)端運(yùn)行環(huán)境。

到此這篇關(guān)于IntelliJ IDEA遠(yuǎn)程Debug Linux的Java程序,找問題不要只會(huì)看日志了的文章就介紹到這了,更多相關(guān)IDEA遠(yuǎn)程Debug Linux的Java程序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot Admin 如何實(shí)現(xiàn)Actuator端點(diǎn)可視化監(jiān)控

    SpringBoot Admin 如何實(shí)現(xiàn)Actuator端點(diǎn)可視化監(jiān)控

    這篇文章主要介紹了SpringBoot Admin 如何實(shí)現(xiàn)Actuator端點(diǎn)可視化監(jiān)控,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • jwt生成token和token解析基礎(chǔ)詳解

    jwt生成token和token解析基礎(chǔ)詳解

    這篇文章主要為大家介紹了jwt生成token和token解析基礎(chǔ),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java實(shí)現(xiàn)去重的方法詳解

    Java實(shí)現(xiàn)去重的方法詳解

    austin支持兩種去重的類型:N分鐘相同內(nèi)容達(dá)到N次去重和一天內(nèi)N次相同渠道頻次去重,這篇文章就來和大家講講這兩種去重的具體實(shí)現(xiàn),需要的可以參考一下
    2023-06-06
  • Springboot常用方法參數(shù)注解示例詳解

    Springboot常用方法參數(shù)注解示例詳解

    這篇文章主要介紹了Springboot常用方法參數(shù)注解及示例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • JAVA如何定義構(gòu)造函數(shù)過程解析

    JAVA如何定義構(gòu)造函數(shù)過程解析

    這篇文章主要介紹了JAVA如何定義構(gòu)造函數(shù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 深入淺出Java中的字節(jié)流和字符流詳解

    深入淺出Java中的字節(jié)流和字符流詳解

    Java 中的輸入輸出(I/O)流主要分為字節(jié)流和字符流,這兩類流為開發(fā)者提供了高效的文件讀寫方式,也解決了不同編碼格式下的字符處理問題,本文將帶你深入了解字節(jié)流和字符流的區(qū)別、應(yīng)用場(chǎng)景以及如何使用它們處理文件操作
    2024-12-12
  • JAVA用戶自定義事件監(jiān)聽實(shí)例代碼

    JAVA用戶自定義事件監(jiān)聽實(shí)例代碼

    這篇文章主要介紹了JAVA用戶自定義事件監(jiān)聽實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • idea如何添加文檔注釋

    idea如何添加文檔注釋

    這篇文章主要介紹了idea如何添加文檔注釋,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • SpringSecurity集成第三方登錄過程詳解(最新推薦)

    SpringSecurity集成第三方登錄過程詳解(最新推薦)

    在ThirdAuthenticationFilter 類的attemptAuthentication()方法中,我們通過authType類型,然后創(chuàng)建對(duì)應(yīng)的Authentication實(shí)現(xiàn)來實(shí)現(xiàn)不同方式的登錄,下面給大家分享SpringSecurity集成第三方登錄過程,感興趣的朋友一起看看吧
    2024-05-05
  • springboot配置開發(fā)和測(cè)試環(huán)境并添加啟動(dòng)路徑方式

    springboot配置開發(fā)和測(cè)試環(huán)境并添加啟動(dòng)路徑方式

    這篇文章主要介紹了springboot配置開發(fā)和測(cè)試環(huán)境并添加啟動(dòng)路徑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論

揭阳市| 钟祥市| 安龙县| 灵台县| 会泽县| 延寿县| 靖西县| 紫阳县| 阿鲁科尔沁旗| 县级市| 馆陶县| 灵丘县| 攀枝花市| 嘉峪关市| 海林市| 绥芬河市| 阳信县| 巍山| 胶州市| 柘荣县| 南安市| 诏安县| 霸州市| 舞阳县| 七台河市| 溧阳市| 中西区| 高邮市| 收藏| 边坝县| 精河县| 祁阳县| 东台市| 达孜县| 禄丰县| 南昌市| 贵德县| 莲花县| 宜兰县| 景洪市| 遂宁市|