百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

IntelliJ远程Debug,找问题不要只会看日志了

csdh11 2025-03-03 18:11 1 浏览

1 前言

我们习惯于在本地开发的时候debug,能快速定位与解决问题,那部署在服务器上是不是就没有办法了呢?只能通过查看日志来定位?

不是的,在远端的服务器上,我们一样可以debug。

2 IDEA的debug

我们先来看一下在IntelliJ IDEA直接debug是怎样的。

先准备一个简单的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?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------------------");
????}
}

功能很简单,获取所有系统环境变量,并打印出含有HOME字段的。

Debug很简单,直接点击以下按钮就可以:

相信大家都知道这一点,但应该很多人都不会注意,IDEA究竟做了什么,为什么就可以调试了呢?我们看一下控制台的日志就明白了:

/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
Connected?to?the?target?VM,?address:?'127.0.0.1:59313',?transport:?'socket'

简化一下,不重要的参数去掉:

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

这就是可以Debug的原因,利用了Java Agent原理。这个功能很强大,类似一个AOP,代理了Java程序,可以利用它进行调试、热部署等。

3 调试本地程序

我们先试试如何可以调试本地程序,不是直接在IDEA上调试。先要编译出class文件RemoteDebug.class,然后按package结构放好。我通过mvn clean compile来编译。

启动程序,在target/classes/目录执行:

$?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

然后程序就会等待调试客户端的连接,不会往下执行。

配置IDEA以进行调试:

配置完成保存后,点击debug就可以了:

程序已经进入debug模式:

我们已经执行到了其中一行,现在看看服务端:

与IDEA是同步的,并且确实已经控制了服务端Java的执行。

4 远程调试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????

通过以下命令在服务端启动程序,这里调试端口改为9999,因为部分端口在远程服务器并没有开启:

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

本地电脑IDEA配置如下:

开始debug,正常控制了远程服务端的Java:

服务端的实时执行情况:

让程序执行完如下:

$?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 总结

本文一步步探索如何进行调试远程的服务器,这在出现问题时定位还是非常有用的。毕竟可以实时看到服务端运行环境。


多读书,多分享;多写作,多整理。

相关推荐

Excel表格技巧—如何保留小数点后两位

在我们日常使用Ofiiceexcel中,经常会用到小数点保留,对此人们习惯性会使用单元格格式设置,不过这种办法并不是真正的四舍五入,而只是改变了excel的显示。我们下面要介绍的这个方式是利用函数做...

小数的意义和性质(十四)

27、在一个两位小数的末尾添上一个0,与原来小数相比,多了1107个计数单位,这个小数原来是多少?举个例子:0.35的末尾添上一个0,就变成了0.350,0.35里有35个0.01,0.350里有35...

必看!文职人员等级标志及有关问题20条!

来源:中国民兵微信公众号大道至简!为了让大家更多了解文职政策、报考文职的粉丝们最快、最直接掌握政策。首先是上独家解读和壁纸。然后,结合独家资料,梳理出20条有关文职的干货,快快收藏吧!1.文职人员的身...

小学数学单元知识体系概述-五年级《小数除法》

一、网络图二、知识点梳理及举例说明1.除数是整数。1)除到被除数的末尾没有余数,能除尽。举例:22.4÷4。...

“分数,小数,百分数 的互化”我这样教学,学生很快就学会了。

这部分知识千万不能忽视,用途可大了。我们在进行分数,小数,百分数四则混合运算时,不会三者之间的转化,很难把题计算准确。那么三者之间怎样转化呢?其实就这么几步:一,分数化小数,用分数的分子除以分数的分...

求小数近似数的最大值和最小值的技巧

例:一个两位小数,四舍五入后的近似数是5.0,这个三位小数最大可能是(),最小可能是()。分析:保留一位小数要看百分位上的数和5比较,若小于5的数舍去;若≥5的数,向前一位进一。四舍是最大,五入是...

实验室检测双乙酰的操作步骤

双乙酰学名是2,3丁二酮,是啤酒发酵过程中酵母自身代谢产生的一种副产物,当双乙酰的含量在浅色啤酒中超过0.15mg/L时,就会使啤酒产生一种令人不愉快的馊饭味,严重影响啤酒的质量和口感,在啤酒中双乙酰...

快来看!玉溪2020年中考分数段出炉

8月7日市教育体育局公布玉溪市2020年初中学业水平考试分数段据介绍,今年,玉溪市普通高中学校招生文化成绩满分为600分(不含照顾加分),由初中学业水平考试的13个学科成绩折算而得,总分累加保留两位小...

截取近似值的方法有几种?在生活中怎样应用这些方法?(21)

根据生活中的实际情况,截取近似值的方法有以下三种:(1)、四舍五入法:...

Excel数值取整及进位

取整数函数907.5;1034.2;1500要改变为908;1035;1500公式为:=CEILING(A1,1)907;1034;1500要改变为910;1040;1500公式为:...

C语言sprintf函数详解:“字符串魔法师”

♂?一句话理解sprintf「将数据按‘魔法咒语’(格式字符串)格式化,并将结果‘封印’到一个字符数组中!」...

sql server 数字四舍五入 保留两位小数

1.使用Round()函数,如Round(@num,2),其中参数2表示保留两位有效数字。缺点:Round()只是负责四舍五入到两位小数,但是不负责去掉后面的0。...

excel表格保留两位小数怎么保留?教您4种设置方法

保留两位小数怎么保留?有4种解决方法,我们来具体演示一下。·方法一:选择需要设置的单元格,然后点击开始菜单,数字功能区,点击增加小数位数或者是减少小数位数,调到保留两位就可以了。·方法二:选择需要设置...

如何对数字进行四舍五入,进一法,去尾法,精度法等不同方式取舍

指定位数取有效位针对数值我们有不同的处理方式,比如保留一位小数位,保留两位小数位,保留整数位等,一般我们都是采用四舍五入...

保留n位小数的函数公式

在日常办公中,Excel和WPS是我们处理数据的得力助手。今天,我们将介绍几个常用的函数,帮助你在数据处理中事半功倍。...